aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--doc/manuals/Makefile12
-rw-r--r--doc/manuals/abis/abis-startup.msc23
-rw-r--r--doc/manuals/abis/dyn_ts_ipa_style1.msc23
-rw-r--r--doc/manuals/abis/dyn_ts_ipa_style2.msc22
-rw-r--r--doc/manuals/abis/dyn_ts_osmocom_style1.msc34
-rw-r--r--doc/manuals/abis/dyn_ts_osmocom_style2.msc31
-rw-r--r--doc/manuals/abis/ipa.adoc106
-rw-r--r--doc/manuals/abis/oml-mo-bts.msc26
-rw-r--r--doc/manuals/abis/oml-mo-carrier.msc24
-rw-r--r--doc/manuals/abis/oml-mo-channel.msc20
-rw-r--r--doc/manuals/abis/oml-mo-sitemgr.msc17
-rw-r--r--doc/manuals/abis/oml-mo-transceiver.msc23
-rw-r--r--doc/manuals/abis/oml-startup.msc34
-rw-r--r--doc/manuals/abis/oml-startup2.msc50
-rw-r--r--doc/manuals/abis/oml-startup3.msc51
-rw-r--r--doc/manuals/abis/oml.adoc950
-rw-r--r--doc/manuals/abis/rsl-startup-pri.msc22
-rw-r--r--doc/manuals/abis/rsl-startup-sec.msc16
-rw-r--r--doc/manuals/abis/rsl-tch-rtp.msc56
-rw-r--r--doc/manuals/abis/rsl.adoc944
-rw-r--r--doc/manuals/abis/rtp.adoc33
-rw-r--r--doc/manuals/chapters/architecture.adoc120
-rw-r--r--doc/manuals/chapters/bts-models.adoc441
-rw-r--r--doc/manuals/chapters/configuration.adoc210
-rw-r--r--doc/manuals/chapters/control.adoc24
-rw-r--r--doc/manuals/chapters/dynamic-timeslots.adoc20
-rw-r--r--doc/manuals/chapters/interfaces.adoc156
-rw-r--r--doc/manuals/chapters/overview.adoc105
-rw-r--r--doc/manuals/dtx.dot85
-rw-r--r--doc/manuals/osmobts-abis-docinfo.xml83
-rw-r--r--doc/manuals/osmobts-abis.adoc92
-rw-r--r--doc/manuals/osmobts-usermanual-docinfo.xml42
-rw-r--r--doc/manuals/osmobts-usermanual.adoc39
-rw-r--r--doc/manuals/osmobts-vty-reference.xml38
-rw-r--r--doc/manuals/rtp-amr-docinfo.xml73
-rw-r--r--doc/manuals/rtp-amr.adoc1362
-rw-r--r--doc/manuals/vty/bts_vty_additions.xml1
-rw-r--r--doc/manuals/vty/bts_vty_reference.xml1633
38 files changed, 7041 insertions, 0 deletions
diff --git a/doc/manuals/Makefile b/doc/manuals/Makefile
new file mode 100644
index 00000000..e1ff2147
--- /dev/null
+++ b/doc/manuals/Makefile
@@ -0,0 +1,12 @@
+TOPDIR = ..
+
+ASCIIDOC = osmobts-usermanual.adoc osmobts-abis.adoc rtp-amr.adoc
+include $(TOPDIR)/build/Makefile.asciidoc.inc
+osmobts-usermanual.pdf: chapters/*.adoc
+osmobts-abis.pdf: abis/*.adoc abis/*.msc
+rtp-amr.pdf: dtx.dot
+
+VTY_REFERENCE = osmobts-vty-reference.xml
+include $(TOPDIR)/build/Makefile.vty-reference.inc
+
+include $(TOPDIR)/build/Makefile.common.inc
diff --git a/doc/manuals/abis/abis-startup.msc b/doc/manuals/abis/abis-startup.msc
new file mode 100644
index 00000000..d30fe41d
--- /dev/null
+++ b/doc/manuals/abis/abis-startup.msc
@@ -0,0 +1,23 @@
+msc {
+ bts [label="BTS"], bsc [label="BSC"];
+
+ bts => bsc [label="TCP Connect (Port 3002, OML)"];
+ bts box bsc [label="IPA CCM Identification (Port 3002)"];
+ bts <= bsc [label="OML Configuration of BTS via OML"];
+ ...;
+ bts <= bsc [label="OML (TRX=0) IPA RSL CONNECT"];
+ bts => bsc [label="TCP Connect (Port 3003, RSL, TRX 0)"];
+ bts box bsc [label="IPA CCM Identification Port 3003"];
+ bts <= bsc [label="RSL BCCH filling (System Information)"];
+ bts <= bsc [label="RSL SACCH filling (SI 5/6)"];
+ ...;
+ bts <= bsc [label="OML (TRX=1) IPA RSL CONNECT"];
+ bts => bsc [label="TCP Connect (Port 3003, RSL, TRX 1)"];
+ bts box bsc [label="IPA CCM Identification (Port 3003)"];
+ bts <= bsc [label="RSL SACCH filling (SI 5/6)"];
+ ...;
+ bts <= bsc [label="OML (TRX=N) IPA RSL CONNECT"];
+ bts => bsc [label="TCP Connect (Port 3003, RSL, TRX N)"];
+ bts box bsc [label="IPA CCM Identification (Port 3003)"];
+ bts <= bsc [label="RSL SACCH filling (SI 5/6)"];
+}
diff --git a/doc/manuals/abis/dyn_ts_ipa_style1.msc b/doc/manuals/abis/dyn_ts_ipa_style1.msc
new file mode 100644
index 00000000..ee917956
--- /dev/null
+++ b/doc/manuals/abis/dyn_ts_ipa_style1.msc
@@ -0,0 +1,23 @@
+msc {
+ hscale = "1.2";
+ phy,bts,pcu,bsc;
+
+ phy box bsc [ label = "PDCH Deactivation" ];
+ bsc => bts [ label = "IPAC PDCH DEACT" ];
+ --- [ label = "Disconnect PDTCH" ];
+ bts => pcu [ label = "info ind (Deactivate)" ];
+ pcu => bts [ label = "chan Deactivate request" ];
+ bts => phy [ label = "L1 chan Deactivate PDTCH SAPIs" ];
+ phy -> bts [ label = "L1 chan Deactivate SAPIs confirm" ];
+ bts => phy [ label = "L1 chan Disconnect PDTCH" ];
+ phy -> bts [ label = "L1 chan Disconnect confirm" ];
+ --- [ label = "Connect TCH" ];
+ bts => phy [ label = "L1 chan Connect TCH" ];
+ phy -> bts [ label = "L1 chan Connect confirm" ];
+ bts => bsc [ label = "IPAC PDCH DEACT ACK" ];
+
+ phy box bsc [ label = "Now BSC may use TCH (example)" ];
+ bsc => bts [ label = "Activate TCH/F" ];
+ bts => phy [ label = "L1 chan Activate SAPIs" ];
+ --- [ label = "Voice call..." ];
+}
diff --git a/doc/manuals/abis/dyn_ts_ipa_style2.msc b/doc/manuals/abis/dyn_ts_ipa_style2.msc
new file mode 100644
index 00000000..c2877895
--- /dev/null
+++ b/doc/manuals/abis/dyn_ts_ipa_style2.msc
@@ -0,0 +1,22 @@
+msc {
+ hscale = "1.2";
+ phy,bts,pcu,bsc;
+
+ --- [ label = "...Voice call ends" ];
+ bsc => bts [ label = "Deactivate TCH/F" ];
+ bts => phy [ label = "L1 chan Deactivate SAPIs" ];
+
+ phy box bsc [ label = "PDCH Activation" ];
+ bsc => bts [ label = "IPAC PDCH ACT" ];
+ --- [ label = "Disconnect TCH" ];
+ bts => phy [ label = "L1 chan Disconnect TCH" ];
+ phy -> bts [ label = "L1 chan Disconnect confirm" ];
+ --- [ label = "Connect PDTCH" ];
+ bts => phy [ label = "L1 chan Connect PDTCH" ];
+ phy -> bts [ label = "L1 chan Connect confirm" ];
+ bts => pcu [ label = "info ind (Activate)" ];
+ pcu => bts [ label = "chan Activate request" ];
+ bts => phy [ label = "L1 chan Activate PDTCH SAPIs" ];
+ phy -> bts [ label = "L1 chan Activate SAPIs confirm" ];
+ bts => bsc [ label = "IPAC PDCH ACT ACK" ];
+}
diff --git a/doc/manuals/abis/dyn_ts_osmocom_style1.msc b/doc/manuals/abis/dyn_ts_osmocom_style1.msc
new file mode 100644
index 00000000..f02f6f60
--- /dev/null
+++ b/doc/manuals/abis/dyn_ts_osmocom_style1.msc
@@ -0,0 +1,34 @@
+msc {
+ hscale = "1.5";
+ phy,bts,pcu,bsc;
+
+ bts => bsc [ label = "RSL Chan Requested" ];
+ phy box bsc [ label = "TS is in PDCH mode, deactivate" ];
+ bsc => bts [ label = "RSL RF Channel Release (PDCH)" ];
+ bts => pcu [ label = "Info Ind (Deactivate)" ];
+ pcu => bts [ label = "Chan Deactivate request" ];
+ bts => phy [ label = "L1 chan Deactivate PDTCH SAPIs" ];
+ phy -> bts [ label = "L1 chan Deactivate SAPIs confirm" ];
+ bts -> bsc [ label = "RSL RF Channel Release Ack (PDCH)" ];
+
+ phy box bsc [ label = "Activate TCH/H" ];
+ bsc => bts [ label = "RSL Channel Activation (TCH/H)" ];
+ --- [ label = "BTS notices: chan still connected as PDTCH, reconnect" ];
+ bts => phy [ label = "L1 chan Disconnect PDTCH" ];
+ phy -> bts [ label = "L1 chan Disconnect confirm" ];
+ bts => phy [ label = "L1 chan Connect TCH/H" ];
+ phy -> bts [ label = "L1 chan Connect confirm" ];
+ --- [ label = "chan reconnect as TCH/H complete" ];
+ bts => phy [ label = "L1 chan Activate SAPIs" ];
+ bts -> bsc [ label = "RSL Channel Activation Ack (TCH/H)" ];
+ --- [ label = "Voice call 1 commences..." ];
+
+ phy box bsc [ label = "A second voice call is requested" ];
+ bts => bsc [ label = "RSL Chan Requested" ];
+ phy box bsc [ label = "BSC finds second slot on dynamic TS in TCH/H mode" ];
+ bsc => bts [ label = "RSL Channel Activation (TCH/H)" ];
+ bts => phy [ label = "L1 chan Activate SAPIs" ];
+ bts -> bsc [ label = "RSL Channel Activation Ack (TCH/H)" ];
+ --- [ label = "Voice call 2 commences..." ];
+
+}
diff --git a/doc/manuals/abis/dyn_ts_osmocom_style2.msc b/doc/manuals/abis/dyn_ts_osmocom_style2.msc
new file mode 100644
index 00000000..9ea65b69
--- /dev/null
+++ b/doc/manuals/abis/dyn_ts_osmocom_style2.msc
@@ -0,0 +1,31 @@
+msc {
+ hscale = "1.5";
+ phy,bts,pcu,bsc;
+
+ --- [ label = "...Voice call 1 ends" ];
+ bts => bsc [ label = "Release Ind" ];
+ bsc => bts [ label = "RSL RF Channel Release (TCH/H)" ];
+ bts => phy [ label = "L1 chan Deactivate SAPIs" ];
+ bts -> bsc [ label = "RSL RF Channel Release Ack (TCH/H)" ];
+ --- [ label = "BSC notices: one chan still in use"];
+
+ --- [ label = "...Voice call 2 ends" ];
+ bts => bsc [ label = "Release Ind" ];
+ bsc => bts [ label = "RSL RF Channel Release (TCH/H)" ];
+ bts => phy [ label = "L1 chan Deactivate SAPIs" ];
+ bts -> bsc [ label = "RSL RF Channel Release Ack (TCH/H)" ];
+
+ phy box bsc [ label = "If all channels on TS are released, PDCH Activation" ];
+ bsc => bts [ label = "RSL Channel Activation (PDCH)" ];
+ bts -> bsc [ label = "RSL Channel Activation Ack (PDCH) (unconditionally)" ];
+ --- [ label = "BTS notices: chan still connected as TCH/H, reconnect" ];
+ bts => phy [ label = "L1 chan Disconnect TCH/H" ];
+ phy -> bts [ label = "L1 chan Disconnect confirm" ];
+ bts => phy [ label = "L1 chan Connect PDTCH" ];
+ phy -> bts [ label = "L1 chan Connect confirm" ];
+ --- [ label = "chan reconnect as PDTCH complete" ];
+ bts => pcu [ label = "Info Ind (Activate)" ];
+ pcu => bts [ label = "chan Activate request" ];
+ bts => phy [ label = "L1 chan Activate PDTCH SAPIs" ];
+ phy -> bts [ label = "L1 chan Activate SAPIs confirm" ];
+}
diff --git a/doc/manuals/abis/ipa.adoc b/doc/manuals/abis/ipa.adoc
new file mode 100644
index 00000000..9768cdd6
--- /dev/null
+++ b/doc/manuals/abis/ipa.adoc
@@ -0,0 +1,106 @@
+== IPA Multiplex
+
+The ETSI/3GPP specifications for A-bis transport (ETSI/3GPP TS 08.56)
+specify the transmission of RSL and OML messages over a LAPD based
+framing on top of 64kBit/s signalling times slots (B-channels) on E1
+lines.
+
+OsmoBTS does not implement this LAPD based transport, but instead
+implements A-bis over IP in a flavor first observed by ip.access nanoBTS
+products. The OsmoBTS implementation is a clean-room re-implementation
+based on the observation and dissection of protocol traces.
+
+LAPD as used in E1 signalling channels provides in-order transmission
+and reliable delivery. This is why TCP was chosen as Layer 4 transport
+protocol on top of IP. TCP however, is a stream based transport
+protocol, which doesn't preserve the boundaries of messages.
+
+To work around this shortcoming, an additional framing layer called the
+IPA multiplex was introduced between TCP and the RSL and OML messages.
+
+.Protocol Stacking
+[width="30%"]
+|===
+|RSL + OML (this document)
+|IPA (this document)
+|TCP (IETF RFC 793)
+|IP (IETF RFC 791)
+|Ethernet (IEEE 802.3)
+|===
+
+=== IPA Header
+
+Each higher-layer PDU is encapsulated by a three-byte IPA header with
+the following structure:
+
+.IPA Header Structure
+[options="header",cols="10%,15%,15%,60%"]
+|===
+|Offset (Octets)|Length|Name|Description
+|0|2|Length|Length of the variable-length payload section in network
+byte order (excluding the length of the IPA Header)
+|2|1|Stream Identifier|Identifies the stream of the payload
+|3|Variable|Payload|higher-layer PDU (i.e. RSL or OML message)
+|===
+
+=== IPA Stream Identifiers
+
+The IPA Stream Identifier serves to differentiate different streams
+within the multiplex. In the context of A-bis, it can be seen as
+analogous to the LAPD TEI on classic A-bis over E1.
+
+The following IPA stream identifiers are being used in A-bis/IP:
+
+.IPA Stream Identifiers
+[options="header",width="70%",cols="20%,20%,60%"]
+|===
+|Value (Hex)|Name|Description
+|0x00|RSL|A-bis RSL according to this document, TRX 0
+|0x01|RSL|A-bis RSL according to this document, TRX 1
+|0x0n|RSL|A-bis RSL according to this document, TRX n
+|0xfe|CCM|IPA Connection Management
+|0xff|OML|A-bis OML according to this document
+|===
+
+
+=== IPA Connection Management (CCM)
+
+The IPA Connection Management is a sub-layer underneath the IPA
+multiplex which is used to manage the connection itself. It supports
+functions like Identity Management and Keep-Alive.
+
+==== Identity Management
+
+When a BTS connects to the BSC, the BSC must identify the connected BTS
+somehow. In ETSI/3GPP A-bis, the E1 multiplex + signalling timeslot
+number is used for this. In IP, there is no similar usable identity.
+Hence, the Unit ID is used for this purpose.
+
+.Procedure for IPA peer identification is as follows
+[options="header",cols="20%,80%"]
+|===
+|Direction|Operation
+|BTS -> BSC|BTS connects the TCP connection to be used with IPA
+|BTS <- BSC|BSC requests BTS identity with ID_GET
+|BTS -> BSC|BTS responds BTS Unit ID with ID_RESP
+|BTS <- BSC|BSC responds with ID_ACK, if the Unit ID is known to the BSC
+|===
+
+Following the above peer identification procedure, transfer of
+higher-level messages such as OML or RSL commences.
+
+==== IPA CCM Messages
+
+IPA CCM supports the following messages
+
+.IPA CCM Messages
+[options="header"]
+[cols="10%,15%,75%"]
+|===
+|Value|Name|Purpose
+|0x00|PING|Request a PONG from the peer
+|0x01|PONG|Response to a PING
+|0x04|ID_GET|Request Identity from peer
+|0x05|ID_RESP|Response to ID_GET
+|0x06|ID_ACK|Identity Acknowledged
+|===
diff --git a/doc/manuals/abis/oml-mo-bts.msc b/doc/manuals/abis/oml-mo-bts.msc
new file mode 100644
index 00000000..75c283fb
--- /dev/null
+++ b/doc/manuals/abis/oml-mo-bts.msc
@@ -0,0 +1,26 @@
+msc {
+ bts [label="BTS"], bsc [label="BSC"];
+ # this is for the BTS Object
+ --- [label="Initial state after establishing OML"];
+ bts => bsc [label="STATE CHG REP (Disabled/Notinstalled/Locked)"];
+ --- [label="MO requests software activation"];
+ bts => bsc [label="SW Activate Req"];
+ bts <= bsc [label="SW Activate Req Ack"];
+ --- [label="BTS instructs BTS to activate software"];
+ bts <= bsc [label="Activate SW"];
+ bts => bsc [label="Activate SW Ack"];
+ --- [label="MO reports new state after SW activation"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency)"];
+ bts => bsc [label="SW Activated Report"];
+ --- [label="Configure the MO with its attributes"];
+ bts <= bsc [label="Set BTS Attributes"];
+ bts => bsc [label="Set BTS Attributes Ack"];
+ bts <= bsc [label="OPSTART"];
+ bts => bsc [label="OPSTART ACK"];
+ --- [label="As this object is locked, we need to unlock it"];
+ bts <= bsc [label="Change Adm State (Unlocked)"];
+ bts => bsc [label="Change Adm State Ack (Unlocked)"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency/Unlocked)"];
+ --- [label="Initialize Radio Transceiver, Radio Carrier, Channels"];
+ bts => bsc [label="STATE CHG REP (Enabled/OK)"];
+}
diff --git a/doc/manuals/abis/oml-mo-carrier.msc b/doc/manuals/abis/oml-mo-carrier.msc
new file mode 100644
index 00000000..fc5070f6
--- /dev/null
+++ b/doc/manuals/abis/oml-mo-carrier.msc
@@ -0,0 +1,24 @@
+msc {
+ bts [label="Radio Carrier"], bsc [label="BSC"];
+ --- [label="Initial state after establishing OML"];
+ bts => bsc [label="STATE CHG REP (Disabled/Notinstalled/Locked)"];
+ --- [label="MO requests software activation"];
+ bts => bsc [label="SW Activate Req"];
+ bts <= bsc [label="SW Activate Req Ack"];
+ --- [label="BTS instructs BTS to activate software"];
+ bts <= bsc [label="Activate SW"];
+ bts => bsc [label="Activate SW Ack"];
+ --- [label="MO reports new state after SW activation"];
+ bts => bsc [label="STATE CHG REP (Disabled/Offline)"];
+ bts => bsc [label="SW Activated Report"];
+ --- [label="Configure the MO with its attributes"];
+ bts <= bsc [label="Set Radio Carrier Attributes"];
+ bts => bsc [label="Set Radio Carrier Attributes Ack"];
+ bts <= bsc [label="OPSTART"];
+ bts => bsc [label="OPSTART ACK"];
+ --- [label="As this object is locked, we need to unlock it"];
+ bts <= bsc [label="Change Adm State (Unlocked)"];
+ bts => bsc [label="Change Adm State Ack (Unlocked)"];
+ bts => bsc [label="STATE CHG REP (Disabled/OK/Unlocked)"];
+ bts => bsc [label="STATE CHG REP (Enabled)"];
+}
diff --git a/doc/manuals/abis/oml-mo-channel.msc b/doc/manuals/abis/oml-mo-channel.msc
new file mode 100644
index 00000000..624ae724
--- /dev/null
+++ b/doc/manuals/abis/oml-mo-channel.msc
@@ -0,0 +1,20 @@
+msc {
+ bts [label="Channel"], bsc [label="BSC"];
+ --- [label="Initial state after establishing OML"];
+ bts => bsc [label="STATE CHG REP (Disabled/Notinstalled/Locked)"];
+ --- [label="MO reports new state after SW activation of Baseband Transceiver"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency)"];
+ bts => bsc [label="SW Activated Report"];
+ --- [label="Configure the MO with its attributes"];
+ bts <= bsc [label="Set Channel Attributes"];
+ bts => bsc [label="Set Channel Attributes Ack"];
+ bts <= bsc [label="OPSTART"];
+ bts => bsc [label="OPSTART ACK"];
+ --- [label="As this object is locked, we need to unlock it"];
+ bts <= bsc [label="Change Adm State (Unlocked)"];
+ bts => bsc [label="Change Adm State Ack (Unlocked)"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency/Unlocked)"];
+ --- [label="Initialize Radio Carrier / Baseband Transceiver"];
+ bts => bsc [label="STATE CHG REP (Disabled/Offline)"];
+ bts => bsc [label="STATE CHG REP (Enabled/OK)"];
+}
diff --git a/doc/manuals/abis/oml-mo-sitemgr.msc b/doc/manuals/abis/oml-mo-sitemgr.msc
new file mode 100644
index 00000000..39e4d159
--- /dev/null
+++ b/doc/manuals/abis/oml-mo-sitemgr.msc
@@ -0,0 +1,17 @@
+msc {
+ bts [label="Site Manager"], bsc [label="BSC"];
+ # this is for the Site Manager Object
+ --- [label="Initial state after establishing OML"];
+ bts => bsc [label="STATE CHG REP (Disabled/Notinstalled)"];
+ --- [label="MO requests software activation"];
+ bts => bsc [label="SW Activate Req"];
+ bts <= bsc [label="SW Activate Req Ack"];
+ --- [label="BTS instructs BTS to activate software"];
+ bts <= bsc [label="Activate SW"];
+ bts => bsc [label="Activate SW Ack"];
+ --- [label="MO reports new state after SW activation"];
+ bts => bsc [label="STATE CHG REP (Enabled)"];
+ bts => bsc [label="SW Activated Report"];
+ bts <= bsc [label="OPSTART"];
+ bts => bsc [label="OPSTART ACK"];
+}
diff --git a/doc/manuals/abis/oml-mo-transceiver.msc b/doc/manuals/abis/oml-mo-transceiver.msc
new file mode 100644
index 00000000..d40e7cc0
--- /dev/null
+++ b/doc/manuals/abis/oml-mo-transceiver.msc
@@ -0,0 +1,23 @@
+msc {
+ bts [label="Baseband Transceiver"], bsc [label="BSC"];
+ --- [label="Initial state after establishing OML"];
+ bts => bsc [label="STATE CHG REP (Disabled/Notinstalled/Locked)"];
+ --- [label="MO requests software activation"];
+ bts => bsc [label="SW Activate Req"];
+ bts <= bsc [label="SW Activate Req Ack"];
+ --- [label="BTS instructs BTS to activate software"];
+ bts <= bsc [label="Activate SW"];
+ bts => bsc [label="Activate SW Ack"];
+ --- [label="MO reports new state after SW activation"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency)"];
+ bts => bsc [label="SW Activated Report"];
+ --- [label="BSC requests RSL establishment"];
+ bts <= bsc [label="IPA RSL Connect"];
+ bts => bsc [label="IPA RSL Connect ACK"];
+ bts <= bsc [label="OPSTART"];
+ bts => bsc [label="OPSTART ACK"];
+ --- [label="As this object is locked, we need to unlock it"];
+ bts <= bsc [label="Change Adm State (Unlocked)"];
+ bts => bsc [label="Change Adm State Ack (Unlocked)"];
+ bts => bsc [label="STATE CHG REP (Disabled/Dependency/Unlocked)"];
+}
diff --git a/doc/manuals/abis/oml-startup.msc b/doc/manuals/abis/oml-startup.msc
new file mode 100644
index 00000000..de5d0392
--- /dev/null
+++ b/doc/manuals/abis/oml-startup.msc
@@ -0,0 +1,34 @@
+msc {
+ hscale = 2;
+
+ chan [label="Channel"], rc [label="Radio Carrier"], smg [label="Site Manager"], bts [label="BTS"], bsc [label="BSC"];
+
+ bts => bsc [label="TCP Connect (Port 3003, OML)"];
+ bts box bsc [label="IPA CCM Identification (Port 3003)"];
+ |||;
+ smg => bsc [label="(Site Mgr) STATE CHG REP (Disabled/NotInstalled)"];
+ bts => bsc [label="(BTS) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ rc => bsc [label="(TRANSC) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 0) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 1) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 2) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 3) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 4) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 5) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 6) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ chan => bsc [label="(Ch 7) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ rc => bsc [label="(RC) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ bts => bsc [label="(GPRS-NSE) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ bts => bsc [label="(GPRS-CELL) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ bts => bsc [label="(GPRS-NSVC0) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ bts => bsc [label="(GPRS-NSVC1) STATE CHG REP (Disabled/NotInstalled/Locked)"];
+ |||;
+ smg => bsc [label="(Site Mgr) SW Activate Req"];
+ smg <= bsc [label="(Site Mgr) SW Activate Req Ack"];
+ smg <= bsc [label="(Site Mgr) Activate SW"];
+ smg => bsc [label="(Site Mgr) Activate SW Ack"];
+ smg => bsc [label="(Site Mgr) STATE CHG REP (Enabled)"];
+ smg => bsc [label="(Site Mgr) SW Activated Report"];
+ smg <= bsc [label="(Site Mgr) OPSTART"];
+ smg => bsc [label="(Site Mgr) OPSTART ACK"];
+}
diff --git a/doc/manuals/abis/oml-startup2.msc b/doc/manuals/abis/oml-startup2.msc
new file mode 100644
index 00000000..8a97e124
--- /dev/null
+++ b/doc/manuals/abis/oml-startup2.msc
@@ -0,0 +1,50 @@
+msc {
+ hscale = 2;
+
+ chan [label="Channel"], rc [label="Radio Carrier"], bts [label="BTS"], bsc [label="BSC"];
+
+ bts box bsc [label="OML Connect + Site Manager Init"];
+ ...;
+ bts => bsc [label="(BTS) SW Activate Req"];
+ bts <= bsc [label="(BTS) SW Activate Req Ack"];
+ bts <= bsc [label="(BTS) Activate SW"];
+ bts => bsc [label="(BTS) Activate SW Ack"];
+ bts => bsc [label="(BTS) STATE CHG REP (Disabled/Dependency)"];
+ bts => bsc [label="(BTS) SW Activated Report"];
+ |||;
+ rc => bsc [label="(TRANSC) SW Activate Req"];
+ rc => bsc [label="(RC) SW Activated Req"];
+ |||;
+ bts <= bsc [label="(BTS) Set BTS Attributes"];
+ bts => bsc [label="(BTS) Set BTS Attributes Ack"];
+ bts <= bsc [label="(BTS) OPSTART"];
+ bts => bsc [label="(BTS) OPSTART Ack"];
+ |||;
+ bts <= bsc [label="(BTS) Change Adm State (Unlocked)"];
+ bts => bsc [label="(BTS) Change Adm State ACK (Unlocked)"];
+ bts => bsc [label="(BTS) STATE CHG REP (Disabled/Dependency/Unlcoked)"];
+ |||;
+ rc <= bsc [label="(TRANSC) SW Activate Req Ack"];
+ rc <= bsc [label="(TRANSC) Activate SW"];
+ rc => bsc [label="(TRANSC) Activate SW Ack"];
+ rc => bsc [label="(TRANSC) STATE CHG REP (Disabled/Dependency)"];
+ rc => bsc [label="(TRANSC) SW Activated Report"];
+
+ chan => bsc [label="(CHAN 0) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 1) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 2) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 3) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 4) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 5) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 6) STATE CHG REP (Disabled/Dependency)"];
+ chan => bsc [label="(CHAN 7) STATE CHG REP (Disabled/Dependency)"];
+ |||;
+ chan => bsc [label="(CHAN 0) SW Activated Report"];
+ chan => bsc [label="(CHAN 1) SW Activated Report"];
+ chan => bsc [label="(CHAN 2) SW Activated Report"];
+ chan => bsc [label="(CHAN 3) SW Activated Report"];
+ chan => bsc [label="(CHAN 4) SW Activated Report"];
+ chan => bsc [label="(CHAN 5) SW Activated Report"];
+ chan => bsc [label="(CHAN 6) SW Activated Report"];
+ chan => bsc [label="(CHAN 7) SW Activated Report"];
+}
diff --git a/doc/manuals/abis/oml-startup3.msc b/doc/manuals/abis/oml-startup3.msc
new file mode 100644
index 00000000..c1fffd2c
--- /dev/null
+++ b/doc/manuals/abis/oml-startup3.msc
@@ -0,0 +1,51 @@
+msc {
+ hscale = 2;
+
+ chan [label="Channel"], rc [label="Radio Carrier"], bts [label="BTS"], bsc [label="BSC"];
+
+ ...;
+ rc <= bsc [label="(RC) SW Activate Req Ack"];
+ rc <= bsc [label="(RC) Activate SW"];
+ rc => bsc [label="(RC) Activate SW Ack"];
+ rc => bsc [label="(RC) STATE CHG REP (Disabled/Offline)"];
+ rc => bsc [label="(RC) SW Activated Report"];
+ rc <= bsc [label="(TRANSC) IPA RSL Connect"];
+ rc => bsc [label="(TRANSC) IPA RSL Connect Ack"];
+ rc <= bsc [label="(TRANSC) OPSTART"];
+ rc => bsc [label="(TRANSC) OPSTART Ack"];
+ rc <= bsc [label="(TRANSC) Change Adm State (Unlocked)"];
+ rc => bsc [label="(TRANSC) Change Adm State Ack (Unlocked)"];
+ rc => bsc [label="(TRANSC) STATE CHG REP (Disabled/Dependency/Unlocked)"];
+ |||;
+ chan <= bsc [label="(CHAN 0) Set Channel Attributes"];
+ chan => bsc [label="(CHAN 0) Set Channel Attributes Ack"];
+ chan <= bsc [label="(CHAN 0) OPSTART"];
+ chan => bsc [label="(CHAN 0) OPSTART Ack"];
+ chan <= bsc [label="(CHAN 0) Change Adm State (Unlocked)"];
+ chan => bsc [label="(CHAN 0) Change Adm State Ack (Unlocked)"];
+ chan => bsc [label="(CHAN 0) STATE CHG REP (Disabled/Dependency/Unlocked)"];
+ ...;
+ chan <= bsc [label="(CHAN 7) Set Channel Attributes"];
+ chan => bsc [label="(CHAN 7) Set Channel Attributes Ack"];
+ chan <= bsc [label="(CHAN 7) OPSTART"];
+ chan => bsc [label="(CHAN 7) OPSTART Ack"];
+ chan <= bsc [label="(CHAN 7) Change Adm State (Unlocked)"];
+ chan => bsc [label="(CHAN 7) Change Adm State Ack (Unlocked)"];
+ chan => bsc [label="(CHAN 7) STATE CHG REP (Disabled/Dependency/Unlocked)"];
+ |||;
+ rc <= bsc [label="(RC) Set Radio Carrier Attributes"];
+ rc => bsc [label="(RC) Set Radio Carrier Attributes Ack"];
+ rc <= bsc [label="(RC) OPSTART"];
+ rc => bsc [label="(RC) OPSTART Ack"];
+ rc <= bsc [label="(RC) Change Adm State (Unlocked)"];
+ rc => bsc [label="(RC) Change Adm State Ack (Unlocked)"];
+ rc => bsc [label="(RC) STATE CHG REP (Disabled/OK/Unlocked)"];
+ rc => bsc [label="(RC) STATE CHG REP (Enabled)"];
+ rc => bsc [label="(TRANSC) STATE CHG REP (Disabled/Offline)"];
+ rc => bsc [label="(TRANSC) STATE CHG REP (Enabled/OK)"];
+ |||;
+ chan => bsc [label="(CHAN 0) STATE CHG REP (Disabled/Offline)"];
+ chan => bsc [label="(CHAN 0) STATE CHG REP (Enabled/OK)"];
+ |||;
+ bts => bsc [label="(BTS) STATE CHG REP (Enabled/OK)"];
+}
diff --git a/doc/manuals/abis/oml.adoc b/doc/manuals/abis/oml.adoc
new file mode 100644
index 00000000..4afcec04
--- /dev/null
+++ b/doc/manuals/abis/oml.adoc
@@ -0,0 +1,950 @@
+== Organization & Maintenance Link (OML)
+
+=== List of Messages
+
+The following tables list the OML messages used by OsmoBTS, grouped by their
+level of compliance with 3GPP TS 12.21.
+
+==== Messages Compliant With TS 12.21
+
+Specific limitations apply, see the linked sections.
+
+.Messages compliant with TS 12.21
+[options="header",cols="10%,10%,20%,35%,5%,20%"]
+|===
+| TS 12.21 § | type code (hex) | This document § | Message | <-/-> | Received/Sent by OsmoBTS
+6+<| *SW Download Management Messages:*
+| 8.3.7 | 0x10 | <<sw_act_rep>> | SW Activated Report | -> | Sent
+6+<| *Air Interface Management Messages:*
+.3+.| 8.6.1 | 0x41 .3+.| <<set_bts_attr>> | Set BTS Attributes | <- | Received
+ | 0x42 | Set BTS Attributes Ack | -> | Sent
+ | 0x43 | Set BTS Attributes Nack | -> | Sent
+.3+.| 8.6.2 | 0x44 .3+.| <<set_radio_attr>> | Set Radio Carrier Attributes | <- | Received
+ | 0x45 | Set Radio Carrier Attributes Ack | -> | Sent
+ | 0x46 | Set Radio Carrier Attributes Nack | -> | Sent
+.3+.| 8.6.3 | 0x47 .3+.| <<set_chan_attr>> | Set Channel Attributes | <- | Received
+ | 0x48 | Set Channel Attributes Ack | -> | Sent
+ | 0x49 | Set Channel Attributes Nack | -> | Sent
+6+<| *State Management and Event Report Messages:*
+ | 8.8.1 | 0x61 | <<state_changed_rep>> | State Changed Event Report | -> | Sent
+.3+.| 8.8.5 | 0x69 .3+.| <<chg_adm_state>> | Change Administrative State | <- | Received
+ | 0x6A | Change Administrative State Ack | -> | Sent
+ | 0x6B | Change Administrative State Nack | -> | Sent
+6+<| *Equipment Management Messages:*
+.3+.| 8.9.2 | 0x74 .3+.| <<opstart>> | Opstart | <- | Received
+ | 0x75 | Opstart Ack | -> | Sent
+ | 0x76 | Opstart Nack | -> | Sent
+|===
+
+
+==== Messages Specific to OsmoBTS
+
+.Messages specific to OsmoBTS, not found in 3GPP TS 12.21
+[options="header"]
+[options="header",cols="20%,55%,5%,20%"]
+|===
+| This document § | Message | <-/-> | Received/Sent by OsmoBTS
+| <<ipacc_set_attr>> | Set Attribute | <- | Received
+|===
+
+
+==== Messages Not Implemented by OsmoBTS
+.3GPP TS 12.21 messages not implemented by OsmoBTS
+[options="header",cols="10%,10%,80%"]
+|===
+| TS 12.21 § | type code (hex) | Message
+3+<| *SW Download Management Messages:*
+.3+.| 8.3.1 | 0x01 | Load Data Initiate
+ | 0x02 | Load Data Initiate Ack
+ | 0x03 | Load Data Initiate Nack
+.2+.| 8.3.2 | 0x04 | Load Data Segment
+ | 0x05 | Load Data Segment Ack
+ | 8.3.3 | 0x06 | Load Data Abort
+.3+.| 8.3.4 | 0x07 | Load Data End
+ | 0x08 | Load Data End Ack
+ | 0x09 | Load Data End Nack
+.3+.| 8.3.5 | 0x0A | SW Activate Request
+ | 0x0B | SW Activate Request Ack
+ | 0x0C | SW Activate Request Nack
+.3+.| 8.3.6 | 0x0D | Activate SW
+ | 0x0E | Activate SW Ack
+ | 0x0F | Activate SW Nack
+3+<| *A-bis Interface Management Messages:*
+.3+.| 8.4.1 | 0x21 | Establish TEI
+ | 0x22 | Establish TEI Ack
+ | 0x23 | Establish TEI Nack
+.3+.| 8.4.2 | 0x24 | Connect Terrestrial Signalling
+ | 0x25 | Connect Terrestrial Signalling Ack
+ | 0x26 | Connect Terrestrial Signalling Nack
+.3+.| 8.4.3 | 0x27 | Disconnect Terrestrial Signalling
+ | 0x28 | Disconnect Terrestrial Signalling Ack
+ | 0x29 | Disconnect Terrestrial Signalling Nack
+.3+.| 8.4.4 | 0x2A | Connect Terrestrial Traffic
+ | 0x2B | Connect Terrestrial Traffic Ack
+ | 0x2C | Connect Terrestrial Traffic Nack
+.3+.| 8.4.5 | 0x2D | Disconnect Terrestrial Traffic
+ | 0x2E | Disconnect Terrestrial Traffic Ack
+ | 0x2F | Disconnect Terrestrial Traffic Nack
+3+<| *Transmission Management Messages:*
+.3+.| 8.5.1 | 0x31 | Connect Multi-Drop Link
+ | 0x32 | Connect Multi-Drop Link Ack
+ | 0x33 | Connect Multi-Drop Link Nack
+.3+.| 8.5.2 | 0x34 | Disconnect Multi-Drop Link
+ | 0x35 | Disconnect Multi-Drop Link Ack
+ | 0x36 | Disconnect Multi-Drop Link Nack
+3+<| *Test Management Messages:*
+.3+.| 8.7.1 | 0x51 | Perform Test
+ | 0x52 | Perform Test Ack
+ | 0x53 | Perform Test Nack
+.3+.| 8.7.2 | 0x54 | Test Report
+ | 0x55 | Send Test Report
+ | 0x56 | Send Test Report Ack
+ | 8.7.3 | 0x57 | Send Test Report Nack
+.3+.| 8.7.4 | 0x58 | Stop Test
+ | 0x59 | Stop Test Ack
+ | 0x5A | Stop Test Nack
+3+<| *State Management and Event Report Messages:*
+ | 8.8.2 | 0x62 | Failure Event Report
+.3+.| 8.8.3 | 0x63 | Stop Sending Event Reports
+ | 0x64 | Stop Sending Event Reports Ack
+ | 0x65 | Stop Sending Event Reports Nack
+.3+.| 8.8.4 | 0x66 | Restart Sending Event Reports
+ | 0x67 | Restart Sending Event Reports Ack
+ | 0x68 | Restart Sending Event Reports Nack
+.3+.| 8.8.6 | 0x6C | Change Administrative State Request
+ | 0x6D | Change Administrative State Request Ack
+ | 0x6E | Change Administrative State Request Nack
+.3+.| 8.8.7 | 0x93 | Report Outstanding Alarms
+ | 0x94 | Report Outstanding Alarms Ack
+ | 0x95 | Report Outstanding Alarms Nack
+3+<| *Equipment Management Messages:*
+.3+.| 8.9.1 | 0x71 | Changeover
+ | 0x72 | Changeover Ack
+ | 0x73 | Changeover Nack
+.3+.| 8.9.3 | 0x87 | Reinitialize
+ | 0x88 | Reinitialize Ack
+ | 0x89 | Reinitialize Nack
+.3+.| 8.9.4 | 0x77 | Set Site Outputs
+ | 0x78 | Set Site Outputs Ack
+ | 0x79 | Set Site Outputs Nack
+.3+.| 8.9.5 | 0x90 | Change HW Configuration
+ | 0x91 | Change HW Configuration Ack
+ | 0x92 | Change HW Configuration Nack
+3+<| *Measurement Management Messages:*
+ | 8.10.1 | 0x8A | Measurement Result Request
+ | 8.10.2 | 0x8B | Measurement Result Response
+ | 8.10.3 | 0x8C | Stop Measurement
+ | 8.10.4 | 0x8D | Start Measurement
+3+<| *Other Messages:*
+ | 8.11.1 | 0x81 | Get Attributes
+ | 8.11.3 | 0x82 | Get Attribute(s) Response
+ | 8.11.1 | 0x83 | Get Attributes Nack
+.3+.| 8.11.2 | 0x84 | Set Alarm Threshold
+ | 0x85 | Set Alarm Threshold Ack
+ | 0x86 | Set Alarm Threshold Nack
+|===
+
+
+=== Details on Compliant OML Messages
+
+[[sw_act_rep]]
+==== SW Activated Report
+
+OsmoBTS will send an _SW Activated Report_ when RF has been activated
+successfully. The message is compliant with 3GPP TS 12.21 § 8.3.7.
+
+Upon RF activation, two _SW Activated Report_ messages will be sent, for the Object Classes
+
+- Radio Carrier (0x02)
+- Baseband Transceiver (0x04)
+
+[[set_bts_attr]]
+==== Set BTS Attributes
+
+OsmoBTS will receive a _Set BTS Attributes_ message and reply with a
+corresponding ACK message on success. IE handling is fully compliant to TS
+12.21, except that a change of BCCH ARFCN or BSIC while in operation is not
+supported, and hence the _Starting Time_ IE is rejected.
+
+._Set BTS Attributes_ IEs not handled by OsmoBTS
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 12.21 § | IE Name | Handling
+| 9.4.52 | Starting Time | not supported (provokes NACK cause 0x10)
+|===
+
+
+[[set_radio_attr]]
+==== Set Radio Carrier Attributes
+
+This message conforms to 3GPP TS 12.21, with the following limitation,
+as frequency hopping is not supported by OsmoBTS:
+
+._Set Radio Carrier Attributes_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 12.21 § | IE Name | Handling
+| 9.4.5 | ARFCN List | ignored
+|===
+
+
+[[set_chan_attr]]
+==== Set Channel Attributes
+
+This message conforms to 3GPP TS 12.21, with the following limitation: the
+following 3GPP TS 12.21 IEs provoke a NACK response when sent to OsmoBTS, as
+frequency hopping is not supported:
+
+._Set Channel Attributes_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 12.21 § | IE Name | Handling
+| 9.4.21 | HSN | not supported (provokes NACK cause 0x10)
+| 9.4.27 | MAIO | not supported (provokes NACK cause 0x10)
+| 9.4.52 | Starting Time | not supported (provokes NACK cause 0x10)
+|===
+
+[[state_changed_rep]]
+==== State Changed Event Report
+
+This message is compliant with 3GPP TS 12.21. Exactly these IEs are sent by
+OsmoBTS:
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message Type (0xf5) | 3GPP TS 12.21 9.1 | M | V | 1
+| Object Class | 3GPP TS 12.21 9.2 | M | V | 1
+| Object Instance | 3GPP TS 12.21 9.3 | M | V | 3
+| Operational State | 3GPP TS 12.21 9.4.38 | O | TV | 2
+| Availability Status | 3GPP TS 12.21 9.4.7 | O | TL16V (with length of 1) | 3
+|===
+
+[[chg_adm_state]]
+==== Change Administrative State
+
+This message is compliant with 3GPP TS 12.21 § 8.8.5. It applies to all of the
+Object Classes defined in 3GPP TS 12.21 § 9.2 as well as
+<<addnl_obj_classes>>.
+
+[[opstart]]
+==== Opstart
+
+This message is compliant with 3GPP TS 12.21 § 8.9.2. It applies to all of the
+Object Classes defined in 3GPP TS 12.21 § 9.2 as well as
+<<addnl_obj_classes>>.
+
+
+=== Details on OsmoBTS Specific Messages
+
+[[ipacc_set_attr]]
+==== Set Attribute
+
+The message type is 0xf5. This message is sent to OsmoBTS to set
+attributes on instances of managed objects of the non-standard
+additional Object Classes (see <<addnl_obj_classes>>).
+
+The message specifics depend on the Object Class and are detailed in
+<<addnl_obj_classes>>.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message Type (0xf5) | 3GPP TS 12.21 9.1 | M | V | 1
+| Object Class | 3GPP TS 12.21 9.2 | M | V | 1
+| Object Instance | 3GPP TS 12.21 9.3 | M | V | 3
+5+<| _Object Class specific IEs follow, see <<addnl_obj_classes>>..._
+|===
+
+
+[[addnl_obj_classes]]
+=== Additional Object Classes
+
+In addition to 3GPP TS 12.21 Chapter 9.2, the following managed objects
+are supported:
+
+.Additional Managed Object Classes
+[options="header"]
+[cols="20%,20%,60%"]
+|===
+| Value | Name | Description
+| 0xf0 | GPRS NSE | GPRS-NS Entity
+| 0xf1 | GPRS CELL | GPRS Cell Entity
+| 0xf2 | GPRS NSVC | GPRS NS Virtual Circuit
+|===
+
+==== GPRS-NSE Managed Object
+
+There is one NS Entity per BTS. It supports the *Set Attribute* message
+with the following Information Elements:
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message Type | 3GPP TS 12.21 9.1 | M | V | 1
+| Object Class | 3GPP TS 12.21 9.2 | M | V | 1
+| Object Instance | 3GPP TS 12.21 9.3 | M | V | 3
+| GPRS NSEI | <<NM_ATT_IPACC_NSEI>> | O | TL16V | >= 5
+| GPRS NS Configuration | <<NM_ATT_IPACC_NS_LINK_CFG>> | O | TL16V | >= 10
+| GPRS BSSGP Configuration | <<NM_ATT_IPACC_BSSGP_CFG>> | O | TL16V | >= 14
+|===
+
+==== GPRS Cell Managed Object
+
+There is one GPRS Cell entity per BTS. It supports the *Set Attribute*
+message with the following Information Elements:
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message Type | 3GPP TS 12.21 9.1 | M | V | 1
+| Object Class | 3GPP TS 12.21 9.2 | M | V | 1
+| Object Instance | 3GPP TS 12.21 9.3 | M | V | 3
+| GPRS Routing Area Code | <<NM_ATT_IPACC_RAC>> | O | TL16V | >= 4
+| GPRS Paging Configuration | <<NM_ATT_IPACC_GPRS_PAGING_CFG>> | O | TL16V | >= 5
+| GPRS RLC Configuration | <<NM_ATT_IPACC_RLC_CFG>> | O | TL16V | >= 12
+| GPRS Coding Schemes | <<NM_ATT_IPACC_CODING_SCHEMES>> | O | TL16V | >= 5
+| GPRS RLC Configuration 2 | <<NM_ATT_IPACC_RLC_CFG_2>> | O | TL16V | >= 8
+| GPRS RLC Configuration 3 | <<NM_ATT_IPACC_RLC_CFG_3>> | O | TL16V | >= 4
+|===
+
+==== GPRS NS-VC Managed Object
+
+There are two GPRS NS-VC instances per BTS. It supports the *Set
+Attribute* message with the following Information Elements:
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message Type | 3GPP TS 12.21 9.1 | M | V | 1
+| Object Class | 3GPP TS 12.21 9.2 | M | V | 1
+| Object Instance | 3GPP TS 12.21 9.3 | M | V | 3
+| GPRS NSVCI | <<NM_ATT_IPACC_NSVCI>> | O | TL16V | >= 5
+| GPRS NS Link Configuration | <<NM_ATT_IPACC_NS_LINK_CFG>> | O | TL16V | >= 11
+|===
+
+
+=== Information Elements Overview
+
+All of the IEs handled by OsmoBTS are listed below, with limitations and
+additions to TS 12.21 specified in more detail.
+
+==== IEs Conforming to TS 12.21
+
+The following Information Elements are accepted by OsmoBTS.
+
+IEs marked __ignored__ may be sent to OsmoBTS without causing error
+conditions. These IEs are skipped during message parsing and are never
+evaluated.
+
+IEs marked __ignored__ and additionally marked as being received by OsmoBTS
+(<-) are in fact parsed and their values are stored by OsmoBTS, but these
+stored items are currently not used in the OsmoBTS code base.
+
+.IEs conforming to TS 12.21
+[options="header",cols="5%,10%,40%,5%,40%"]
+|===
+| tag (hex) | TS 12.21 § | IE name | <-/-> | Received/Sent by OsmoBTS
+| 0x00 | 9.4.1 | Abis Channel | | _ignored_
+| 0x01 | 9.4.2 | Additional Info | | _ignored_
+| 0x02 | 9.4.3 | Additional Text | | _ignored_
+| 0x03 | 9.4.4 | Administrative State | <- -> | Received & Sent
+| 0x04 | 9.4.5 | ARFCN List | <- | Received, with exactly 1 ARFCN: see <<NM_ATT_ARFCN_LIST>>;
+ ignored by _Set Radio Attribute_ message (<<set_radio_attr>>)
+| 0x05 | 9.4.6 | Autonomously Report | | _ignored_
+| 0x06 | 9.4.7 | Availability Status | -> | Sent
+| 0x07 | 9.4.8 | BCCH ARFCN | <- | Received
+| 0x08 | 9.4.9 | BSIC | <- | Received
+| 0x09 | 9.4.10 | BTS Air Timer | <- | Received
+| 0x0a | 9.4.11 | CCCH Load Indication Period | <- | Received
+| 0x0b | 9.4.12 | CCCH Load Threshold | <- | Received
+| 0x0c | 9.4.13 | Channel Combination | <- | Received, with additional channel combinations: see <<ie_chan_comb>>
+| 0x0d | 9.4.14 | Connection Failure Criterion | <- | Received, with limitations see <<ie_conn_fail_crit>>
+| 0x0e | 9.4.15 | Destination | | _ignored_
+| 0x0f | 9.4.16 | Event Type | | _ignored_
+| 0x11 | 9.4.17 | File Data | | _ignored_
+| 0x12 | 9.4.18 | File Id | | _ignored_
+| 0x13 | 9.4.19 | File Version | | _ignored_
+| 0x14 | 9.4.20 | GSM Time | | _ignored_
+| 0x16 | 9.4.22 | HW Configuration | | _ignored_
+| 0x18 | 9.4.24 | Intave Parameter | <- | _ignored_
+| 0x19 | 9.4.25 | Interference level Boundaries | <- | _ignored_
+| 0x1a | 9.4.26 | List of Required Attributes | | _ignored_
+| 0x1c | 9.4.28 | Manufacturer Dependent State | | _ignored_
+| 0x1d | 9.4.29 | Manufacturer Dependent Thresholds | | _ignored_
+| 0x1e | 9.4.30 | Manufacturer Id | | _ignored_
+| 0x1f | 9.4.31 | Max Timing Advance | <- | Received
+| 0x20 | 9.4.34 | Multi-drop BSC Link | | _ignored_
+| 0x21 | 9.4.35 | Multi-drop next BTS Link | | _ignored_
+| 0x22 | 9.4.36 | Nack Causes | -> | Sent
+| 0x23 | 9.4.37 | Ny1 | <- | Received
+| 0x24 | 9.4.38 | Operational State | -> | Sent
+| 0x25 | 9.4.39 | Overload Period | <- | _ignored_
+| 0x26 | 9.4.40 | Physical Config | | _ignored_
+| 0x27 | 9.4.41 | Power Class | | _ignored_
+| 0x28 | 9.4.42 | Power Output Thresholds | | _ignored_
+| 0x29 | 9.4.43 | Probable Cause | | _ignored_
+| 0x2a | 9.4.44 | RACH Busy Threshold | <- | Received
+| 0x2b | 9.4.45 | RACH Load Averaging Slots | <- | _ignored_
+| 0x2c | 9.4.46 | Radio Sub Channel | | _ignored_
+| 0x2d | 9.4.47 | RF Max Power Reduction | <- | Received
+| 0x2e | 9.4.48 | Site Inputs | | _ignored_
+| 0x2f | 9.4.49 | Site Outputs | | _ignored_
+| 0x30 | 9.4.50 | Source | | _ignored_
+| 0x31 | 9.4.51 | Specific Problems | | _ignored_
+| 0x33 | 9.4.53 | T200 | <- | _ignored_ (1s on DCCH, 2s on ACCH)
+| 0x34 | 9.4.54 | TEI | | _ignored_
+| 0x35 | 9.4.55 | Test Duration | | _ignored_
+| 0x36 | 9.4.56 | Test No | | _ignored_
+| 0x37 | 9.4.57 | Test Report Info | | _ignored_
+| 0x38 | 9.4.58 | VSWR Thresholds | | _ignored_
+| 0x39 | 9.4.59 | Window Size | | _ignored_
+| 0x40 | 9.4.60 | TSC | <- | Received, with limitations: see <<NM_ATT_TSC>>
+| 0x41 | 9.4.61 | SW Configuration | | _ignored_
+| 0x43 | 9.4.63 | Perceived Severity | | _ignored_
+| 0x44 | 9.4.64 | Get Attribute Response Info | | _ignored_
+| 0x45 | 9.4.65 | Outstanding Alarm Sequence | | _ignored_
+| 0x46 | 9.4.66 | HW Conf Change Info | | _ignored_
+| 0x47 | 9.4.32 | Measurement Result | | _ignored_
+|===
+
+==== IEs Not Conforming to TS 12.21
+
+.IEs not conforming to TS 12.21
+[options="header",cols="5%,10%,30%,55%"]
+|===
+| tag (hex) | TS 12.21 § | IE name | Description
+| 0x15 | 9.4.21 | HSN | presence causes NACK response
+| 0x17 | 9.4.23 | HW Description | _ignored_ by OsmoBTS, but coding may differ, see <<ie_hw_desc>>
+| 0x1b | 9.4.27 | MAIO | presence causes NACK response
+| 0x32 | 9.4.52 | Starting Time | presence causes NACK response
+| 0x42 | 9.4.62 | SW Description | not supported
+| 0x48 | 9.4.33 | Measurement Type | not supported
+|===
+
+
+==== Additional Attributes and Parameters
+
+The following Information Elements are defined in addition to those
+specified in 3GPP TS 12.21 Chapter 9.4.
+
+All of these additional IEs are _received_ by OsmoBTS.
+
+These attributes are not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+.Additional IEs handled by OsmoBTS but not defined in TS 12.21
+[options="header",cols="5%,50%,45%"]
+|===
+| tag (hex) | IE name | Description
+| 0x80 | RSL Destination IP Address | <<NM_ATT_IPACC_DST_IP>>
+| 0x81 | RSL Destination TCP Port | <<NM_ATT_IPACC_DST_IP_PORT>>
+| 0x85 | RSL IPA Stream ID | <<NM_ATT_IPACC_STREAM_ID>>
+| 0x9a | GPRS Routing Area Code | <<NM_ATT_IPACC_RAC>>
+| 0x9c | GPRS Paging Configuration | <<NM_ATT_IPACC_GPRS_PAGING_CFG>>
+| 0x9d | GPRS NSEI | <<NM_ATT_IPACC_NSEI>>
+| 0x9e | GPRS BVCI | <<NM_ATT_IPACC_BVCI>>
+| 0x9f | GPRS NSVCI | <<NM_ATT_IPACC_NSVCI>>
+| 0xa0 | GPRS NS Configuration | <<NM_ATT_IPACC_NS_CFG>>
+| 0xa1 | GPRS BSSGP Configuration | <<NM_ATT_IPACC_BSSGP_CFG>>
+| 0xa2 | GPRS NS Link Configuration | <<NM_ATT_IPACC_NS_LINK_CFG>>
+| 0xa3 | GPRS RLC Configuration | <<NM_ATT_IPACC_RLC_CFG>>
+| 0xa8 | GPRS Coding Schemes | <<NM_ATT_IPACC_CODING_SCHEMES>>
+| 0xa9 | GPRS RLC Configuration 2 | <<NM_ATT_IPACC_RLC_CFG_2>>
+| 0xac | GPRS RLC Configuration 3 | <<NM_ATT_IPACC_RLC_CFG_3>>
+|===
+
+
+=== Details on IEs
+
+[[ie_hw_desc]]
+==== HW Description
+
+TS 12.21 suggests a series of 5 length-value pairs for the _HW Description_ IE.
+Instead, OsmoBTS interprets it as a single TL16V. The value of this IE is
+ignored by OsmoBTS, yet the coding may affect message parsing.
+
+[width="40%",cols="90%,10%"]
+[grid="none"]
+|===
+| Attribute Identifier (0x17) | 1
+| Length | 2-3
+| Ignored | N
+|===
+
+
+[[NM_ATT_ARFCN_LIST]]
+==== ARFCN List
+
+Since OsmoBTS does not support frequency hopping, the _ARFCN List_ must contain
+exactly one ARFCN.
+
+[[ie_chan_comb]]
+==== Additional Channel Combinations
+
+In addition to 3GPP TS 12.21 Chapter 9.4.13, the following channel
+combinations are supported:
+
+.Additional Channel Combinations
+[options="header"]
+[cols="10%,90%"]
+|===
+| Value | Description
+| 0x0b | Reserved for PBCCH + PCCCH + PDTCH/F + PACCH/F + PTCCH/F
+| 0x0c | Reserved for PBCCH + PDTCH/F + PACCH/F + PTCCH/F
+| 0x0d | PDTCH/F + PACCH/F + PTCCH/F
+| 0x80 | ip.access style Dynamic TCH/F / PDCH
+| 0x81 | Reserved for Dynamic TCH/F / TCH/H
+| 0x90 | Osmocom style Dynamic TCH/F / TCH/H / PDCH
+|===
+
+The _Reserved_ combinations are not actually supported/implemented
+yet, but merely reserved for such functionality, if it is eventually
+implemented.
+
+For more information on how the different dynamic channel combinations
+work, please see the <<rsl-dynamic-channels>>.
+
+[[ie_conn_fail_crit]]
+==== Connection Failure Criterion
+
+3GPP TS 12.21 Chapter 9.4.14 specifies two different options for the
+_Connection Failure Criterion_. OsmoBTS only implements the option
+coded as 0x01, i.e. based upon uplink SACCH error rate
+(RADIO_LINK_TIMEOUT).
+
+[[NM_ATT_TSC]]
+==== TSC
+
+Due to limitations in the currently supported PHY implementations,
+OsmoBTS supports only one global TSC for all channels on one TRX, rather
+than a separate TSC for each timeslot, as expected by 3GPP TS 12.21.
+
+
+[[NM_ATT_IPACC_DST_IP]]
+==== RSL Destination IP Address
+
+The value part of this attribute has a length of 4 octets and is encoded
+as IPv4 address in network byte order.
+
+[width="40%",cols="90%,10%"]
+[grid="none"]
+|===
+| Attribute Identifier (0x80) | 1
+| IPv4 Address (MSB first) | 2-5
+|===
+
+
+[[NM_ATT_IPACC_DST_IP_PORT]]
+==== RSL Destination TCP Port
+
+The value part of this attribute has a length of 2 octets and contains
+the TCP destination port for the RSL connection, encoded in network byte
+order.
+
+[width="40%",cols="90%,10%"]
+[grid="none"]
+|===
+| Attribute Identifier (0x81) | 1
+| Port number (MSB first) | 2-3
+|===
+
+
+[[NM_ATT_IPACC_STREAM_ID]]
+==== RSL IPA Stream ID
+
+The value part of this attribute has a length of one octet and specifies
+the IPA stream ID to be used for the RSL connection of this TRX.
+
+[width="40%",cols="90%,10%"]
+[grid="none"]
+|===
+| Attribute Identifier (0x85) | 1
+| Stream ID | 2
+|===
+
+
+[[NM_ATT_IPACC_RAC]]
+==== GPRS Routing Area Code
+
+The value part of the GPRS Routing Area code consists of a single octet
+encoding the GPRS Routing Area Code.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_GPRS_PAGING_CFG]]
+==== GPRS Paging Configuration
+
+The value part of this attribute consists of two octets encoded as
+follows:
+
+[options="header"]
+[cols="10%,90%"]
+|===
+| Offset | Description
+| 0 | GPRS Paging repeat time in units of 50ms intervals
+| 1 | GPRS Paging repeat count
+|===
+
+
+[[NM_ATT_IPACC_NSEI]]
+==== GPRS NSEI
+
+The value part of the GPRS NSEI is encoded as 16bit integer value in
+network byte order.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_BVCI]]
+==== GPRS BVCI
+
+The value part of this attribute consists of two octets encoding the
+BSSGP Virtual Circuit Identifier (BVCI) as unsigned 16 bit integer in
+network byte order.
+
+
+[[NM_ATT_IPACC_NSVCI]]
+==== GPRS NSVCI
+
+The value part of the GPRS NSVCI attribute is a 16bit unsigned integer
+in network byte order, encoding the GPRS NSVCI as specified in 3GPP TS
+08.16.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_NS_CFG]]
+==== GPRS NS Configuration
+
+The value part of the GPRS NS Configuration consists of an array of 7 octets,
+each describing one GPRS NS related timer:
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_BSSGP_CFG]]
+==== GPRS BSSGP Configuration
+
+The value part of the GPRS BSSGP configuration consists of an array of
+11 octets, each describing one GPRS BSSGP related timer:
+
+[options="header"]
+[cols="10%,90%"]
+|===
+| Offset | Description
+| 0 | Blocking Timer (T1)
+| 1 | Blocking Retries
+| 2 | Unblocking Retries
+| 3 | Reset Timer (T2)
+| 4 | Reset Retries
+| 5 | Suspend Timer (T3) in units of 100ms
+| 6 | Suspend Retries
+| 7 | Resume Timer (T4) in units of 100ms
+| 8 | Resume Retries
+| 9 | Capability Update Timer (T5)
+| 10 | Capability Update Retries
+|===
+
+The detailed description of the meaning of those timers is given in the
+GPRS BSSGP specification 3GPP TS 08.18.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_NS_LINK_CFG]]
+==== GPRS NS Link Configuration
+
+This attribute is 8 octets long and encoded as follows:
+[options="header"]
+[cols="10%,10%,80%"]
+|===
+| Offset | Length | Description
+| 0 | 2 | GPRS-NS Remote UDP Port Number (SGSN side)
+| 2 | 4 | GPRS-NS Remote IPv4 Address (SGSN side)
+| 6 | 2 | GPRS-NS Local UDP Port Number (BTS side)
+|===
+
+All values are encoded in network byte order.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_RLC_CFG]]
+==== GPRS RLC Configuration
+
+The value part of the GPRS RLC Configuration consists of an array of 9
+octets, each describing a RLC timer:
+
+[options="header"]
+[width="60%",cols="10%,80%,10%"]
+|===
+| Offset | Description | Unit
+| 0 | GPRS RLC Timer T3142 | s
+| 1 | GPRS RLC Timer T3169 | s
+| 2 | GPRS RLC Timer T3191 | s
+| 3 | GPRS RLC Timer T3193 | 10ms
+| 4 | GPRS RLC Timer T3195 | s
+| 5 | GPRS RLC Timer T3101 | s
+| 6 | GPRS RLC Timer T3103 | s
+| 7 | GPRS RLC Timer T3105 | s
+| 8 | GPRS RLC CV Countdown | -
+|===
+
+The meaning of the RLC timers are specified in 3GPP TS 04.60.
+
+The countdown value specifies the RLC CV value from which the countdown
+procedure is started.
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_CODING_SCHEMES]]
+==== GPRS Coding Schemes
+
+The value part of the GPRS Coding Schemes consists of two octets
+encoding the available GPRS and EDGE coding schemes.
+
+[options="header"]
+|===
+| *bit* | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0
+| byte at offset 0 | MCS9 | x | x | x | CS4 | CS3 | CS2 | CS1
+| byte at offset 1 | MCS8 | MCS7| MCS6 | MCS5 | MCS4| MCS3 | MCS2 | MCS1
+|===
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_RLC_CFG_2]]
+==== GPRS RLC Configuration 2
+
+The value part of this attribute is 8 octets long and encoded as
+follows:
+[options="header"]
+[width="60%",cols="10%,10%,70%,10%"]
+|===
+| Offset | Length | Description | Unit
+| 0 | 2 | Downlink TBF Extension Timer | 10ms
+| 2 | 2 | Uplink TBF Extension Timer | 10ms
+| 4 | 2 | Initial GPRS Coding Scheme | -
+|===
+
+The Initial GPRS Coding Scheme is encoded as follows:
+[options="header"]
+[width="40%",cols="50%,50%"]
+|===
+| Value | Description
+| 1 | CS 1
+| 2 | CS 2
+| 3 | CS 3
+| 4 | CS 4
+|===
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+
+[[NM_ATT_IPACC_RLC_CFG_3]]
+==== GPRS RLC Configuration 3
+
+This attribute contains information about the initial MCS used for new EDGE
+TBFs.
+
+It is encoded as follows:
+[options="header"]
+[width="40%",cols="50%,50%"]
+|===
+| Value | Description
+| 1 | MCS 1
+| 2 | MCS 2
+| 3 | MCS 3
+| 4 | MCS 4
+| 5 | MCS 5
+| 6 | MCS 6
+| 7 | MCS 7
+| 8 | MCS 8
+| 9 | MCS 9
+|===
+
+This attribute is not used by OsmoBTS, but
+simply passed to OsmoPCU connected to the PCU socket.
+
+=== A-bis OML Initialization / BTS bring-up
+
+At the time an Abis/IP BTS connects to via OML to the BSC, it is
+initialized according to the procedures described in 3GPP TS 12.21 as
+amended by this document.
+
+Each Managed Object (MO) is separately initialized. The initialization
+sequence and parameters differ slightly depending on the MO involved.
+
+Some parts of the sequences described below are optional, such as the
+Software activation. In the OsmoBTS case, the software is not modular
+and thus all MOs start with the software fully activated. In effect, no
+__Software Activate Request__ is being sent by the MO to the BSC, nor
+does the BSC need to initialize the __Activate Software__ procedure.
+
+Still, the full sequences are shown in order to explain the Abis/IP
+protocol.
+
+Also, the initial state of the MOs at time of OML connection
+initialization is not always guaranteed to be __Disabled/Notinstalled__.
+Rather, the BSC implementation has to deal with the initial state as
+reported by the MOs at time of re-connection.
+
+==== Site Manager MO Initialization
+
+.A-bis OML Initialization of Site Manager MO
+["mscgen"]
+----
+include::oml-mo-sitemgr.msc[]
+----
+
+The Site Manager MO does not depend on other MOs, nor does it have an
+Administrative state (__Locked/Unlocked__), thus it immediately commences in
+the __Enabled__ state.
+
+==== BTS MO Initialization
+
+.A-bis OML Initialization of BTS MO
+["mscgen"]
+----
+include::oml-mo-bts.msc[]
+----
+
+As shown in the BTS MO, its state is
+
+* Availability state __Dependency__, meaning it depends on other MOs to
+ be initialized before becoming enabled.
+* Administrative state __Locked__, as the object is first waiting to
+ receive attributes in the __Locked__ state, before the __Change
+ Administrative State (Unlocked)__ procedure is used to request
+ transitioning into Unlocked state.
+
+==== Baseband Transceiver MO Initialization
+
+.A-bis OML Initialization of Baseband Transceiver MO
+["mscgen"]
+----
+include::oml-mo-transceiver.msc[]
+----
+
+There is one Baseband Transceiver MO per TRX in the BTS. For a
+multi-TRX BTS, the above procedure must be repeated for each TRX.
+
+
+==== Radio Carrier MO Initialization
+
+.A-bis OML Initialization of Radio Carrier MO
+["mscgen"]
+----
+include::oml-mo-carrier.msc[]
+----
+
+There is one Radio Carrier MO per TRX in the BTS. For a multi-TRX BTS,
+the above procedure must be repeated for each TRX.
+
+
+==== Channel MO Initialization
+
+.A-bis OML Initialization of Radio Carrier MO
+["mscgen"]
+----
+include::oml-mo-channel.msc[]
+----
+
+There are 8 timeslots in each TRX, and correspondingly 8 Channel MOs in
+every TRX. The above procedure must thus be repeated for each timeslot
+in each transceiver of the BTS.
+
+
+==== Complete BTS Initialization Procedure
+
+Some of below steps are optional, as is their detailed ordering. In
+practice, the procedures for different MOs may overlap. The message
+sequence charts in this document have been hand-crafted to avoid such
+overlap for the sake of clarity.
+
+[[oml-msc-1]]
+.A-bis OML BTS bring-up (1/3)
+["mscgen"]
+----
+include::oml-startup.msc[]
+----
+
+As shown in <<oml-msc-1>>, after the OML TCP connection is established,
+
+. the identity is exchanged via IPA CCM,
+. the BTS sends an 'OML EVENT STATE CHANGED REPORT' for every
+ Managed Object, and
+. the BTS subsequently requests the activation of its 'Site Manager' Object
+ which the BSC performs by the 'Activate SW' command.
+. After successful activation of the software in the Site Manager,
+.. the state changes to 'Enabled', and an event report is generated
+ accordingly, and
+.. the BSC is notified about the SW activation in an associated report.
+. Finally, the BSC requests the start of the Site Manager
+.. using the 'OPSTART' command,
+.. which is subsequently acknowledged by the Site Manager.
+
+[[oml-msc-2]]
+.A-bis OML BTS bring-up (2/3)
+["mscgen"]
+----
+include::oml-startup2.msc[]
+----
+
+[[oml-msc-3]]
+.A-bis OML BTS bring-up (3/3)
+["mscgen"]
+----
+include::oml-startup3.msc[]
+----
+
+<<oml-msc-2>> shows:
+
+. Software Activation and associated state transitions of the BTS MO;
+. Setting of the BTS Attributes followed by OPSTART;
+. Software Activation and associated state transitions of the 'Baseband
+ Transceiver' MO;
+. Software Activation and associated state transitions of the 'Radio
+ Carrier' MO;
+. Once the 'Baseband Transceiver' MO has its software activated, the
+ 'Channel' MOs (one for each timeslot) indicate their state change as
+ well as software activation.
+
+<<oml-msc-3>> shows:
+
+. The 'Radio Carrier' MO Software Activation;
+. The Request to the 'Baseband Transceiver' MO to establish the RSL
+ signalling connection to the BSC;
+. Subsequent OPSTART and Change of Administrative State on the 'Baseband
+ Transceiver' MO;
+. The following procedure takes place for each of the 'Channel' MOs:
+.. Set the Channel Attributes (such as channel combination),
+.. OPSTART,
+.. change the Administrative State to Unlocked,
+.. followed by a State Change Event Report with the new state.
+. After all 'Channel' MOs are initialized, the Radio Carrier goes through
+ a similar procedure:
+.. Set attributes,
+.. OPSTART,
+.. change Administrative State to Unlocked,
+.. followed by a State Change Event Report with the new State (Enabled/OK)
+. All 'Channel' MOs now also report their state as Enabled/OK.
+. Finally, the BTS reports its state as Enabled/OK.
+
diff --git a/doc/manuals/abis/rsl-startup-pri.msc b/doc/manuals/abis/rsl-startup-pri.msc
new file mode 100644
index 00000000..a4798df9
--- /dev/null
+++ b/doc/manuals/abis/rsl-startup-pri.msc
@@ -0,0 +1,22 @@
+msc {
+ bts [label="TRX"], bsc [label="BSC"];
+
+ bts => bsc [label="TCP Connect (Port 3003, RSL)"];
+ bts box bsc [label="IPA CCM Identification (Port 3003)"];
+ |||;
+
+ bts <= bsc [label="BCCH Information (SI1)"];
+ bts <= bsc [label="BCCH Information (SI2)"];
+ ...;
+ bts <= bsc [label="BCCH Information (SI3)"];
+ bts <= bsc [label="BCCH Information (SI4)"];
+ |||;
+ bts <= bsc [label="SACCH FILLING (SI5)"];
+ ...;
+ bts <= bsc [label="SACCH FILLING (SI6)"];
+ |||;
+ bts => bsc [label="RF Resource Indication"];
+ ...;
+ bts => bsc [label="RF Resource Indication"];
+ ...;
+}
diff --git a/doc/manuals/abis/rsl-startup-sec.msc b/doc/manuals/abis/rsl-startup-sec.msc
new file mode 100644
index 00000000..d961412b
--- /dev/null
+++ b/doc/manuals/abis/rsl-startup-sec.msc
@@ -0,0 +1,16 @@
+msc {
+ bts [label="TRX"], bsc [label="BSC"];
+
+ bts => bsc [label="TCP Connect (Port 3003, RSL)"];
+ bts box bsc [label="IPA CCM Identification (Port 3003)"];
+ |||;
+
+ bts <= bsc [label="SACCH FILLING (SI5)"];
+ ...;
+ bts <= bsc [label="SACCH FILLING (SI6)"];
+ |||;
+ bts => bsc [label="RF Resource Indication"];
+ ...;
+ bts => bsc [label="RF Resource Indication"];
+ ...;
+}
diff --git a/doc/manuals/abis/rsl-tch-rtp.msc b/doc/manuals/abis/rsl-tch-rtp.msc
new file mode 100644
index 00000000..55228b48
--- /dev/null
+++ b/doc/manuals/abis/rsl-tch-rtp.msc
@@ -0,0 +1,56 @@
+msc {
+ hscale = 2;
+
+ ms [label="MS"], bts [label="BTS"], bsc [label="BSC"], Msc [label="MSC"], mgw [label="MGW"];
+
+ ms => bts [label="L1 RACH burst"];
+ bts => bsc [label="RSL CHAN RQD"];
+ bts <= bsc [label="RSL CHAN ACT"];
+ bts => bsc [label="RSL CHAN ACT ACK"];
+ bts <= bsc [label="RSL IMM ASS CMD (RR IMM ASS)"];
+ ms <= bts [label="RR IMMEDIATE ASSIGN"];
+ ms => bts [label="LAPDm SABM (CM SERVICE REQ)"];
+ ms <= bts [label="LAPDm FIXME"];
+ bts => bsc [label="RSL ESTABLISH IND (CM SERVICE REQ)"];
+ bsc => Msc [label="CR (BSSAP COMPLETE L3 (CM SERVICE REQ))"];
+ ...;
+ ms box Msc [label="MM Common Procedures (INFO, ID, AUTH, CIPH)"];
+ ...;
+ ms => bts [label="CC SETUP"];
+ bts => bsc [label="RSL DATA IND (CC SETUP)"];
+ bsc => Msc [label="DT1 (DTAP (CC SETUP))"];
+ ...;
+ ms box Msc [label="CC Signalling"];
+ ...;
+ bsc <= Msc [label="BSSAP ASSIGNMENT CMD (TCH)"];
+ bts <= bsc [label="RSL IPA CRCX", id="1"];
+ bts => bsc [label="RSL IPA CRCX ACK (IP/Port @ BTS)"];
+ bsc => Msc [label="FIXME"];
+ Msc => mgw [label="FIXME"];
+ bts <- mgw [label="Start RTP + RTCP UDP Flows"];
+
+ bts <= bsc [label="RSL DATA REQ (RR CHAN MOD MODIFY)"];
+ ms <= bts [label="RR CHAN MOD MODIFY"];
+ ms => bts [label="RR CHAN MOD MODIFY ACK"];
+ bts => bsc [label="RSL DATA IND (RR CHAN MOD MODIFY ACK)"];
+ |||;
+ bts <= bsc [label="RSL MODE MODIFY REQ"];
+ bts => bsc [label="RSL MODE MODIFY ACK"];
+
+ Msc <= mgw [label="FIXME"];
+ bsc <= Msc [label="FIXME"];
+ bts <= bsc [label="RSL IPA MDCX (IP/Port @ MGW)", id="2"];
+ bts => bsc [label="RSL IPA MDCX ACK"];
+
+ bts -> mgw [label="Start RTP + RTCP UDP Flows"];
+ ms box mgw [label="Active Voice Call"];
+ bts => bsc [label="RSL MEAS RES"];
+ ...;
+
+ bts <= bsc [label="RSL IPA DLCX"];
+ bts => bsc [label="RSL IPA DLCX ACK"];
+ bts -x mgw [label="Stop RTP + RTCP UDP Flows"];
+
+ bts <= bsc [label="RSL RF CHAN REL"];
+ bts => bsc [label="RSL RF CHAN REL ACK"];
+}
diff --git a/doc/manuals/abis/rsl.adoc b/doc/manuals/abis/rsl.adoc
new file mode 100644
index 00000000..33ae26d6
--- /dev/null
+++ b/doc/manuals/abis/rsl.adoc
@@ -0,0 +1,944 @@
+== Radio Signalling Link (RSL)
+
+=== List of Messages
+
+The following tables list the RSL messages used by OsmoBTS A-bis/IP,
+grouped by their level of compliance with 3GPP TS 08.58.
+
+==== Messages Compliant With TS 08.58
+
+Specific additions and limitations apply, see the linked sections.
+
+.Messages compliant with TS 08.58
+[options="header",cols="10%,20%,45%,5%,20%"]
+|===
+| TS 08.58 § | This document § | Message | <-/-> | Received/Sent by OsmoBTS
+5+<| *Radio link layer management messages*
+| 8.3.1 | - | DATA REQUEST | <- | Received
+| 8.3.2 | - | DATA INDICATION | -> | Sent
+| 8.3.3 | - | ERROR INDICATION | -> | Sent
+| 8.3.4 | - | ESTABLISH REQUEST | <- | Received
+| 8.3.5 | - | ESTABLISH CONFIRM | -> | Sent
+| 8.3.6 | - | ESTABLISH INDICATION | -> | Sent
+| 8.3.7 | - | RELEASE REQUEST | <- | Received
+| 8.3.8 | - | RELEASE CONFIRM | -> | Sent
+| 8.3.9 | - | RELEASE INDICATION | -> | Sent
+| 8.3.10 | - | UNIT DATA REQUEST | <- | Received
+| 8.3.11 | - | UNIT DATA INDICATION | -> | Sent
+5+<| *DEDICATED CHANNEL MANAGEMENT MESSAGES*
+| 8.4.1 | <<CHANNEL_ACTIVATION>> | CHANNEL ACTIVATION | <- | Received
+| 8.4.2 | <<CHANNEL_ACTIVATION>> | CHANNEL ACTIVATION ACKNOWLEDGE | -> | Sent
+| 8.4.3 | <<CHANNEL_ACTIVATION>> | CHANNEL ACTIVATION NEGATIVE ACKNOWLEDGE | -> | Sent
+| 8.4.4 | - | CONNECTION FAILURE INDICATION | -> | Sent
+| 8.4.5 | - | DEACTIVATE SACCH | <- | Received
+| 8.4.6 | - | ENCRYPTION COMMAND | <- | Received
+| 8.4.7 | - | HANDOVER DETECTION | -> | Sent
+| 8.4.8 | <<MEASUREMENT_RESULT>> | MEASUREMENT RESULT | -> | Sent
+| 8.4.9 | <<MODE_MODIFY>> | MODE MODIFY | <- | Received
+| 8.4.10 | - | MODE MODIFY ACKNOWLEDGE | -> | Sent
+| 8.4.11 | - | MODE MODIFY NEGATIVE ACKNOWLEDGE | -> | Sent
+| 8.4.14 | - | RF CHANNEL RELEASE | <- | Received
+| 8.4.15 | <<MS_POWER_CONTROL>> | MS POWER CONTROL | <- | Received
+| 8.4.19 | - | RF CHANNEL RELEASE ACKNOWLEDGE | -> | Sent
+| 8.4.20 | <<SACCH_INFO_MODIFY>> | SACCH INFO MODIFY | <- | Received
+5+<| *COMMON CHANNEL MANAGEMENT MESSAGES*
+| 8.5.1 | <<BCCH_INFORMATION>> | BCCH INFORMATION | <- | Received
+| 8.5.2 | - | CCCH LOAD INDICATION | -> | Sent
+| 8.5.3 | <<CHANNEL_REQUIRED>> | CHANNEL REQUIRED | -> | Sent
+| 8.5.5 | <<PAGING_COMMAND>> | PAGING COMMAND | <- | Received
+| 8.5.6 | - | IMMEDIATE ASSIGN COMMAND | <- | Received
+| 8.5.8 | <<SMS_BROADCAST_COMMAND>> | SMS BROADCAST COMMAND | <- | Received
+5+<| *TRX MANAGEMENT MESSAGES*
+| 8.6.1 | <<RF_RESOURCE_INDICATION>> | RF RESOURCE INDICATION | -> | Sent
+| 8.6.2 | <<SACCH_FILLING>> | SACCH FILLING | <- | Received
+| 8.6.4 | - | ERROR REPORT | -> | Sent
+|===
+
+==== Messages Specific to OsmoBTS
+
+.Messages specific to OsmoBTS, not found in 3GPP TS 08.58
+[options="header",cols="15%,15%,45%,5%,20%"]
+|===
+2+| This document § | Message | <-/-> | Received/Sent by OsmoBTS
+5+<| *User Plane Transport Management* (<<user_plane_txp_mgmt>>)
+.3+.| <<rsl_crcx>> | <<rsl_crcx_msg>> | RSL Create Connection (CRCX) | <- | Received
+ | <<rsl_crcx_msg_ack>> | RSL Create Connection (CRCX) ACK | -> | Sent
+ | <<rsl_crcx_msg_nack>> | RSL Create Connection (CRCX) NACK | -> | Sent
+.3+.| <<rsl_mdcx>> | <<rsl_mdcx_msg>> | RSL Modify Connection (MDCX) | <- | Received
+ | <<rsl_mdcx_msg_ack>> | RSL Modify Connection (MDCX) ACK | -> | Sent
+ | <<rsl_mdcx_msg_nack>> | RSL Modify Connection (MDCX) NACK | -> | Sent
+.3+.| <<rsl_dlcx>> | <<rsl_dlcx_msg>> | RSL Delete Connection (DLCX) | <- | Received
+ | <<rsl_dlcx_msg_ack>> | RSL Delete Connection (DLCX) ACK | -> | Sent
+ | <<rsl_dlcx_msg_nack>> | RSL Delete Connection (DLCX) NACK | -> | Sent
+ | <<rsl_dlcx_ind>> | <<rsl_dlcx_ind_msg>> | RSL Delete Connection (DLCX) Indication | -> | Sent
+5+<| *IPA style PDCH Management* (<<ipa_style_pdch_mgmt>>)
+.3+.| <<pdch_act>> | <<rsl_pdch_act>> | RSL PDCH Activation | <- | Received
+ | <<rsl_pdch_act_ack>> | RSL PDCH Activation ACK | -> | Sent
+ | <<rsl_pdch_act_nack>> | RSL PDCH Activation NACK | -> | Sent
+.3+.| <<pdch_deact>> | <<rsl_pdch_deact>> | RSL PDCH Deactivation | <- | Received
+ | <<rsl_pdch_deact_ack>> | RSL PDCH Deactivation ACK | -> | Sent
+ | <<rsl_pdch_deact_nack>> | RSL PDCH Deactivation NACK | -> | Sent
+|===
+
+==== Messages Not Implemented by OsmoBTS
+
+.3GPP TS 08.58 messages not implemented by OsmoBTS
+[options="header",cols="10%,90%"]
+|===
+| TS 08.58 § | Message
+2+<| *DEDICATED CHANNEL MANAGEMENT MESSAGES*
+| 8.4.12 | PHYSICAL CONTEXT REQUEST
+| 8.4.13 | PHYSICAL CONTEXT CONFIRM
+| 8.4.16 | BS POWER CONTROL
+| 8.4.17 | PREPROCESS CONFIGURE
+| 8.4.18 | PREPROCESSED MEASUREMENT RESULT
+| 8.4.21 | TALKER DETECTION
+| 8.4.22 | LISTENER DETECTION
+| 8.4.23 | REMOTE CODEC CONFIGURATION REPORT
+| 8.4.24 | ROUND TRIP DELAY REPORT
+| 8.4.25 | PRE-HANDOVER NOTIFICATION
+| 8.4.26 | MULTIRATE CODEC MODIFICATION REQUEST
+| 8.4.27 | MULTIRATE CODEC MODIFICATION ACKNOWLEDGE
+| 8.4.28 | MULTIRATE CODEC MODIFICATION NEGATIVE ACKNOWLEDGE
+| 8.4.29 | MULTIRATE CODEC MODIFICATION PERFORMED
+| 8.4.30 | TFO REPORT
+| 8.4.31 | TFO MODIFICATION REQUEST
+2+<| *COMMON CHANNEL MANAGEMENT MESSAGES*
+| 8.5.4 | DELETE INDICATION
+| 8.5.7 | SMS BROADCAST REQUEST
+| 8.5.9 | CBCH LOAD INDICATION
+| 8.5.10 | NOTIFICATION COMMAND
+2+<| *TRX MANAGEMENT MESSAGES*
+| 8.6.3 | OVERLOAD
+2+<| *LOCATION SERVICES MESSAGES*
+| 8.7.1 | LOCATION INFORMATION
+|===
+
+
+=== Message Limitation Details
+
+[[CHANNEL_ACTIVATION]]
+==== Channel Activation
+
+When used on a timeslot using the non-standard channel combination
+'NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH' as configured by OML, the regular
+RSL channel activation procedures can not only be used for activation
+of circuit-switched channels, but also for activation of a PDCH.
+
+See <<OSMOCOM_DYN_TS>>.
+
+NOTE:: Do not confuse this with the IPA style _PDCH ACT_ type
+dynamic PDCH protocol employed by nanoBTS devices (<<ipa_style_pdch_mgmt>>).
+
+[[MEASUREMENT_RESULT]]
+==== Measurement Result
+
+Conforms to 3GPP TS 08.58 § 8.4.8 with this limitation:
+
+._Measurement Result_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.37 | MS Timing Offset | never sent by OsmoBTS
+|===
+
+[[MODE_MODIFY]]
+==== Mode Modify
+
+Conforms to 3GPP TS 08.58 § 8.4.9 with these limitations:
+
+._Mode Modify_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.45 | Main channel reference | _ignored_
+| 9.3.53 | MultiRate Control | _ignored_
+| 9.3.54 | Supported Codec Types | _ignored_
+|===
+
+[[MS_POWER_CONTROL]]
+==== MS Power Control
+
+Conforms to 3GPP TS 08.58 § 8.4.15 with these limitations:
+
+._MS Power Control_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.31 | MS Power Parameters | _ignored_
+|===
+
+
+[[SACCH_INFO_MODIFY]]
+==== SACCH Info Modify
+
+Conforms to 3GPP TS 08.58 § 8.4.20, with these exceptions:
+
+._SACCH Info Modify_ IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.30 | System Info Type | See below for available types
+| 9.3.23 | Starting Time | not supported, provokes an _Error Report_ response
+|===
+
+._System Info Type_ values that can occur on the SACCH
+[options="header",width="50%",cols="20%,80%"]
+|===
+| Value | Name
+| 0x05 | RSL_SYSTEM_INFO_5
+| 0x06 | RSL_SYSTEM_INFO_6
+| 0x0d | RSL_SYSTEM_INFO_5bis
+| 0x0e | RSL_SYSTEM_INFO_5ter
+| 0x47 | RSL_EXT_MEAS_ORDER
+| 0x48 | RSL_MEAS_INFO
+|===
+
+[[BCCH_INFORMATION]]
+==== BCCH Information
+
+Conforms to 3GPP TS 08.58 § 8.5.1, with these limitations and extensions:
+
+._BCCH Information_ IE details
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.30 | System Info Type | See <<SACCH_INFO_MODIFY>> for available types
+| 9.3.11 | L3 Info | This IE may be included instead of a 9.3.39 _Full BCCH Info_ IE.
+ The _Full BCCH Info_ takes precedence over _L3 Info_.
+ To stop SI transmission, both of these IEs must be omitted.
+|===
+
+
+[[CHANNEL_REQUIRED]]
+==== Channel Required
+
+Conforms to 3GPP TS 08.58 § 8.5.3, with these limitations:
+
+._Channel Required_ message IE details
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.16 | Physical Context | never sent by OsmoBTS
+|===
+
+
+[[PAGING_COMMAND]]
+==== Paging Command
+
+Conforms to 3GPP TS 08.58 § 8.5.5, with these limitations:
+
+._Paging Command_ message IE details
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.49 | eMLPP Priority | _ignored_
+|===
+
+NOTE: If adding the identity to the paging queue fails, the BSC is not notified
+in any way.
+
+[[SMS_BROADCAST_COMMAND]]
+=== SMS Broadcast Command
+
+Conforms to 3GPP TS 08.58 § 8.5.8, with these limitations:
+
+._Broadcast Command_ message IE details
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.44 | SMSCB Channel Indicator | _ignored_
+|===
+
+
+[[RF_RESOURCE_INDICATION]]
+==== RF Resource Indication
+
+This message does not conform to 3GPP TS 08.58 § 8.6.1, in that it omits the
+_Resource Information_ IE that would contain the actual payload data, which
+renders this message void.
+
+._RF Resource Indication_ message IE exceptions
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.21 | Resource Information | OsmoBTS omits this IE, though TS 08.58
+ specifies it as mandatory.
+|===
+
+
+[[SACCH_FILLING]]
+==== SACCH Filling
+
+Conforms to 3GPP TS 08.58 § 8.6.2, with these limitations:
+
+._SACCH Filling_ message IE limitations
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.3.30 | System Info Type | See <<SACCH_INFO_MODIFY>> for available types
+| 9.3.23 | Starting Time | _ignored_
+|===
+
+
+[[user_plane_txp_mgmt]]
+=== User Plane Transport Management
+
+This chapter defines the A-bis/IP specific RSL procedures that are
+introduced in addition to the 3GPP TS 08.58 standard procedures.
+
+In classic A-bis over E1, user plane traffic is carried over 16kBps
+sub-slots of 64kBps E1 time-slots according to ETSI/3GPP TS 08.60. As
+the E1 line is a dedicated line between BTS and BSC, no further
+addressing information is required.
+
+In A-bis/IP as described by the present document, new RSL procedures
+have been introduced to deal with the different properties of
+the underlying IP based transport medium.
+
+[[rsl_crcx]]
+==== RSL Create Connection (CRCX)
+
+This procedure is used by the BSC to request the BTS to allocate + bind
+to a BTS-local UDP port for the subsequent transmission of user-plane
+data via RTP.
+
+To do so, the BSC sends the *Create Connection (CRCX)* message. In case of
+successful outcome, the BTS responds with *Create Connection (CRCX)
+ACK*. In case of any error, the BTS responds with *Create Connection
+(CRCX) NACK*.
+
+See <<rsl_crcx_msg>>, <<rsl_crcx_msg_ack>>, <<rsl_crcx_msg_nack>>
+
+[[rsl_mdcx]]
+==== RSL Modify Connection (MDCX)
+
+This procedure is used by the BSC to request the BTS to modify an
+already-bound BTS-local UDP port for user-plane RTP. It is used in
+particular to configure the remote IP address and UDP port to which the
+BTS shall send user-plane RTP traffic. This remote address is normally
+either a Media Gateway (MGW) of some sort, but could also be the RTP
+socket of the corresponding other leg of a mobile-to-mobile call.
+
+To modify a user-plane connection, the BSC sends the *Modify Connection*
+message. In case of successful outcome, the BTS responds with
+*Modify Connection (MDCX) ACK*. In case of any error, the BTS responds
+with *Modify Connection (MDCX) NACK*.
+
+See <<rsl_mdcx_msg>>, <<rsl_mdcx_msg_ack>>, <<rsl_mdcx_msg_nack>>
+
+[[rsl_dlcx]]
+==== RSL Delete Connection (DLCX)
+
+This procedure is used by the BSC to request the BTS to delete an
+already-existing BTS-local UDP port for user-plane RTP.
+
+To delete a user-plane connection, the BSC sends the *Delete Connection
+(DLCX)* message. In case of successful outcome, the BTS responds with
+*Delete Connection (DLCX) ACK*. In case of any error, the BTS responds
+with *Delete Connection (DLCX) NACK*.
+
+See <<rsl_dlcx_msg>>, <<rsl_dlcx_msg_ack>>, <<rsl_dlcx_msg_nack>>
+
+[[rsl_dlcx_ind]]
+==== RSL Delete Connection (DLCX) Indication
+
+When a BTS-local UDP connection for user-plane RTP is automatically
+released at the time of RF CHANNEL RELEASE, the BTS sends a unilateral,
+non-acknowledged *RSL Delete Connection (DLCX) Indication* to the BSC.
+
+See <<rsl_dlcx_ind_msg>>
+
+
+[[rsl-dynamic-channels]]
+=== Dynamic Channel Combinations
+
+In the classic data model established by ETSI/3GPP for A-bis, each
+timeslot (channel) is configured using a static channel combination by
+means of A-bis OML. Particularly in presence of GPRS services, this
+is very unflexible and leads to inefficient use of air interface
+resources.
+
+As such, several methods have been implemented to overcome this
+limitation. The fundamental operation can be outlined like this:
+
+* Configuration of a particular _dynamic_ channel combination via OML
+* activation of TCH works like on a classic TCH channel combination
+* activation of PDCH requires some specific PDCH activation procedure
+
+There are two variants implemented in the OsmoBTS A-bis dialect:
+
+[[ipa_style_pdch_mgmt]]
+==== IPA Style Dynamic Channels
+
+This method is used when OML uses 'NM_CHANC_IPAC_TCHFull_PDCH' (0x80)
+as channel combination for the given time-slot.
+
+'IPA style' refers to 'ip.access' compatible PDCH activation and deactivation.
+
+When the IPA style dynamic channel combination _TCH/F or PDCH_
+is set, the non-standard 'PDCH ACTIVATE' (<<pdch_act>>) and 'PDCH
+DEACTIVATE' (<<pdch_deact>>) procedures are used for switching an idle
+channel into PDCH mode and back into idle mode.
+
+When the channel is used as TCH/F, regular circuit-switched activation
+is performed, like on any traditional TCH/F. However, the BSC must
+make sure to first disable the PDCH on the timeslot, before activating
+it as TCH/F. Likewise, any circuit-switched TCH/F on the channel must
+be deactivated using standard RSL signalling, before the specific PDCH
+related procedures are used to enable the PDCH.
+
+[[pdch_act]]
+===== PDCH Activate
+
+This procedure is used by the BSC to request the BTS to activate an
+IPA style dynamic TCH/F+PDCH channel in PDCH mode.
+
+The operation is not supported on any other physical channel type.
+
+See <<rsl_pdch_act>>, <<rsl_pdch_act_ack>>, <<rsl_pdch_act_nack>>
+
+[[pdch_deact]]
+===== PDCH Deactivate
+
+This procedure is used by the BSC to request the BTS to deactivate an
+active PDCH on any an IPA style dynamic TCH/F+PDCH channel.
+
+The operation is not supported on any other physical channel type.
+
+See <<rsl_pdch_deact>>, <<rsl_pdch_deact_ack>>, <<rsl_pdch_deact_nack>>
+
+===== IPA Style Dynamic Switchover Example
+
+.Part 1: example for dynamic channel switchover, for IPA style dynamic timeslots
+["mscgen"]
+----
+include::dyn_ts_ipa_style1.msc[]
+----
+
+.Part 2: example for dynamic channel switchover, for IPA style dynamic timeslots
+["mscgen"]
+----
+include::dyn_ts_ipa_style2.msc[]
+----
+
+
+[[OSMOCOM_DYN_TS]]
+==== Osmocom Style Dynamic Channels
+
+This method is in use when OML uses
+'NM_CHANC_OSMO_TCHFull_TCHHalf_PDCH' (0x90) for the given time-slot.
+
+The activation of PDCH is performed by using the regular 'RSL CHANNEL ACTIVATE'
+procedure according to <<CHANNEL_ACTIVATION>>, with these modifications:
+
+* The 'C-bits' part of the 'Channel Number' IE take the non-standard binary
+ value 11000 (C5 thru C1 as seen in 3GPP TS 08.58 § 9.3.1).
+* The 'A-bits' part of the 'Activation Type' IE take the non-standard binary
+ value 1111, with an additional fourth bit (add A4 to A3 thru A1 as seen in
+ 3GPP TS 08.58 § 9.3.3; all remaining reserved bits as well as the 'R' bit are
+ coded as zero).
+* The normally mandatory 'Channel Mode' IE is omitted; none of the optional IEs
+ are included.
+
+Hence the message consists of exactly these IEs:
+
+.PDCH type _Channel Activation_ message IEs
+[options="header",cols="10%,30%,60%"]
+|===
+| TS 08.58 § | IE Name | Handling
+| 9.1 | Message discriminator | Dedicated Channel Management
+| 9.2 | Message type | CHANnel ACTIVation
+| 9.3.1 | Channel number | 'C-bits' 11000, plus TS bits as usual
+| 9.3.3 | Activation type | 'A-bits' 1111
+|===
+
+===== Osmocom Style Dynamic Switchover Example
+
+.Part 1: example for dynamic channel switchover, for Osmocom style dynamic timeslots
+["mscgen"]
+----
+include::dyn_ts_osmocom_style1.msc[]
+----
+
+.Part 2: example for dynamic channel switchover, for Osmocom style dynamic timeslots
+["mscgen"]
+----
+include::dyn_ts_osmocom_style2.msc[]
+----
+
+=== Message Formats and Contents
+
+[[rsl_crcx_msg]]
+==== Create Connection (CRCX)
+
+This message is sent by the BSC to the BTS to request the
+creation of a user-plane RTP connection for the specified *Channel
+number*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Destination IP Address | <<RSL_IE_IPAC_REMOTE_IP>> | O | TV | 5
+| Destination IP Port | <<RSL_IE_IPAC_REMOTE_PORT>> | O | TV | 3
+| IP Speech Mode | <<RSL_IE_IPAC_SPEECH_MODE>> | O | TV | 2
+| RTP Payload Type 2 | <<RSL_IE_IPAC_RTP_PAYLOAD2>> | O | TV | 2
+|===
+
+[[rsl_crcx_msg_ack]]
+==== Create Connection (CRCX) ACK
+
+This message is sent by the BTS to the BSC to acknowledge the
+successful outcome of creating a user-plane RTP connection. It is sent
+in response to the *Create Connection (CRCX)*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | M | TV | 3
+| Source IP Address | <<RSL_IE_IPAC_LOCAL_IP>> | O | TV | 5
+| Source IP Port | <<RSL_IE_IPAC_LOCAL_PORT>> | O | TV | 3
+| RTP Payload Type 2 | <<RSL_IE_IPAC_RTP_PAYLOAD2>> | O | TV | 2
+|===
+
+[[rsl_crcx_msg_nack]]
+==== Create Connection (CRCX) NACK
+
+This message is sent by the BTS to the BSC to signal the
+unsuccessful outcome of creating a user-plane RTP connection. It is
+sent in response to the *Create Connection (CRCX)*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Destination IP Address | <<RSL_IE_IPAC_REMOTE_IP>> | O | TV | 5
+| Destination IP Port | <<RSL_IE_IPAC_REMOTE_PORT>> | O | TV | 3
+| Cause | 08.58 9.3.26 | O | TLV | >= 3
+|===
+
+
+[[rsl_mdcx_msg]]
+==== Modify Connection (MDCX)
+
+This message is sent by the BSC to the BTS to modify the
+properties of a user-plane RTP connection.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | O | TV | 3
+| Destination IP Address | <<RSL_IE_IPAC_REMOTE_IP>> | O | TV | 5
+| Destination IP Port | <<RSL_IE_IPAC_REMOTE_PORT>> | O | TV | 3
+| IP Speech Mode | <<RSL_IE_IPAC_SPEECH_MODE>> | O | TV | 2
+| RTP Payload Type 2 | <<RSL_IE_IPAC_RTP_PAYLOAD2>> | O | TV | 2
+|===
+
+[[rsl_mdcx_msg_ack]]
+==== Modify Connection (MDCX) ACK
+
+This message is sent by the BTS to the BSC to acknowledge the
+successful modification of a user-plane RTP connection. It is sent in
+response to a *Modify Connection (MDCX)*
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | O | TV | 3
+| Source IP Address | <<RSL_IE_IPAC_LOCAL_IP>> | C | TV | 5
+| Source IP Port | <<RSL_IE_IPAC_LOCAL_PORT>> | C | TV | 3
+| RTP Payload Type 2 | <<RSL_IE_IPAC_RTP_PAYLOAD2>> | O | TV | 2
+|===
+
+[[rsl_mdcx_msg_nack]]
+==== Modify Connection (MDCX) NACK
+
+This message is sent by the BTS to the BSC to signal the
+unsuccessful outcome of modifying the user-plane RTP connection for the
+specified Channel number. It is sent in response to the *Modify
+Connection (MDCX)*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Cause | 08.58 9.3.26 | M | TLV | >= 3
+|===
+
+[[rsl_dlcx_ind_msg]]
+==== Delete Connection (DLCX) Indication
+
+This message is sent by the BTS to indicate the automatic
+deletion of a BTS-local UDP connection for user-plane RTP traffic at the
+time of RF Channel release.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | M | TV | 3
+| Connection Id | <<RSL_IE_IPAC_CONN_STAT>> | M | TV | 3
+| Cause | 08.58 9.3.26 | M | TLV | >= 3
+|===
+
+[[rsl_dlcx_msg]]
+==== Delete Connection (DLCX)
+
+This message is sent by the BSC to the BTS to request the
+disconnection of a user-plane RTP connection for the specified Channel
+number.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | O | TV | 3
+|===
+
+[[rsl_dlcx_msg_ack]]
+==== Delete Connection (DLCX) ACK
+
+This message is sent by the BTS to signal the successful
+outcome of deleting the user-plane RTP connection for the specified
+Channel number. It is sent in response to the *Delete Connection
+(DLCX)*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | O | TV | 3
+| Connection Statistics | <<RSL_IE_IPAC_CONN_STAT>> | C | TV | 29
+|===
+
+[[rsl_dlcx_msg_nack]]
+==== Delete Connection (DLCX) NACK
+
+This message is sent by the BTS to signal the unsuccessful
+outcome of deleting the user-plane RTP connection for the specified
+Channel number. It is sent in response to the *Delete Connection
+(DLCX)*.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Connection Id | <<RSL_IE_IPAC_CONN_ID>> | O | TV | 3
+| Cause | 08.58 9.3.26 | M | TLV | >= 3
+|===
+
+[[rsl_pdch_act]]
+==== PDCH Activate
+
+This message is sent by the BSC to request the activation of a PDCH on
+a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+[[rsl_pdch_act_ack]]
+==== PDCH Activate ACK
+
+This message is sent by the BTS to confirm the successful activation
+of a PDCH on a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Frame Number | 08.58 9.3.8 | O | TV | 3
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+[[rsl_pdch_act_nack]]
+==== PDCH Activate NACK
+
+This message is sent by the BTS to reject the successful activation
+of a PDCH on a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Cause | 08.58 9.3.26 | M | TLV | >= 3
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+[[rsl_pdch_deact]]
+==== PDCH Deactivate
+
+This message is sent by the BSC to request the deactivation of a PDCH
+on a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+[[rsl_pdch_deact_ack]]
+==== PDCH Deactivate ACK
+
+This message is sent by the BTS to confirm the successful deactivation
+of a PDCH on a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+[[rsl_pdch_deact_nack]]
+==== PDCH Deactivate NACK
+
+This message is sent by the BTS to reject the deactivation of a PDCH
+on a IPA style dynamic TCH/F+PDCH channel.
+
+[options="header"]
+[cols="30%,25%,15%,15%,15%"]
+|===
+| INFORMATION ELEMENT | REFERENCE | PRESENCE | FORMAT | LENGTH
+| Message discriminator | 08.58 9.1 | M | V | 1
+| Message type | <<own_msg_types>> | M | V | 1
+| Channel number | 08.58 9.3.1 | M | TV | 2
+| Cause | 08.58 9.3.26 | M | TLV | >= 3
+|===
+
+NOTE:: This message is *not* used by Osmocom style dynamic channels
+
+=== Information Element Codings
+
+[[own_msg_types]]
+==== A-bis/IP specific RSL Message discriminators
+
+The following message discriminators are used in addition to those
+indicated in 3GPP TS 08.58 Section 9.1:
+
+.OsmoBTS specific new message discriminators
+[options="header",cols="10%,50%,40%"]
+|===
+| Message Type | Message | This document §
+| 0x70 | Create Connection (CRCX) | <<rsl_crcx_msg>>
+| 0x71 | Create Connection (CRCX) ACK | <<rsl_crcx_msg_ack>>
+| 0x72 | Create Connection (CRCX) NACK | <<rsl_crcx_msg_nack>>
+| 0x73 | Modify Connection (MDCX) | <<rsl_mdcx_msg>>
+| 0x74 | Modify Connection (MDCX) ACK | <<rsl_mdcx_msg_ack>>
+| 0x75 | Modify Connection (MDCX) NACK | <<rsl_mdcx_msg_nack>>
+| 0x76 | Delete Connection (DLCX) Indication | <<rsl_dlcx_ind_msg>>
+| 0x77 | Delete Connection (DLCX) | <<rsl_dlcx_msg>>
+| 0x78 | Delete Connection (DLCX) ACK | <<rsl_dlcx_msg_ack>>
+| 0x79 | Delete Connection (DLCX) NACK | <<rsl_dlcx_msg_nack>>
+| 0x48 | PDCH Activate | <<rsl_pdch_act>>
+| 0x49 | PDCH Activate ACK | <<rsl_pdch_act_ack>>
+| 0x4a | PDCH Activate NACK | <<rsl_pdch_act_nack>>
+| 0x4b | PDCH Deactivate | <<rsl_pdch_deact>>
+| 0x4c | PDCH Deactivate ACK | <<rsl_pdch_deact_ack>>
+| 0x4d | PDCH Deactivate NACK | <<rsl_pdch_deact_nack>>
+|===
+
+==== A-bis/IP specific RSL IEIs
+
+The following Information Element Identifiers (IEIs) are used in
+addition to those indicated in 3GPP TS 08.58 Section 9.3:
+
+.A-bis/IP specific information elements
+[options="header",cols="10%,50%,40%"]
+|===
+| IEI | Name | This document §
+| 0x01 | RSL_IE_CHAN_NR | <<RSL_IE_CHAN_NR>>
+| 0xf0 | RSL_IE_IPAC_REMOTE_IP | <<RSL_IE_IPAC_REMOTE_IP>>
+| 0xf1 | RSL_IE_IPAC_REMOTE_PORT | <<RSL_IE_IPAC_REMOTE_PORT>>
+| 0xf3 | RSL_IE_IPAC_LOCAL_PORT | <<RSL_IE_IPAC_LOCAL_PORT>>
+| 0xf4 | RSL_IE_IPAC_SPEECH_MODE | <<RSL_IE_IPAC_SPEECH_MODE>>
+| 0xf5 | RSL_IE_IPAC_LOCAL_IP | <<RSL_IE_IPAC_LOCAL_IP>>
+| 0xf6 | RSL_IE_IPAC_CONN_STAT | <<RSL_IE_IPAC_CONN_STAT>>
+| 0xf8 | RSL_IE_IPAC_CONN_ID | <<RSL_IE_IPAC_CONN_ID>>
+| 0xfc | RSL_IE_IPAC_RTP_PAYLOAD2 | <<RSL_IE_IPAC_RTP_PAYLOAD2>>
+|===
+
+[[RSL_IE_CHAN_NR]]
+==== RSL_IE_CHAN_NR
+
+This information element is coded like 3GPP TS 08.58 Section 9.3.1,
+but in addition supports the following extended coding:
+
+* C5..C1 bits 0b11000 for PDCH type channels
+
+The TN-Bits are not re-defined in this case but use the same encoding
+as specified in TS 08.58 Section 9.3.1.
+
+NOTE:: The above extension is only valid on an Osmocom-style dynamic
+channel, having configured the 'NM_CHANC_IPAC_TCHFull_PDCH' channel
+combination by OML.
+
+[[RSL_IE_IPAC_REMOTE_IP]]
+==== RSL_IE_IPAC_REMOTE_IP
+
+This information element contains the remote (MGW side) IPv4 address in
+network byte order. It is encoded as fixed-size element with one byte
+IEI followed by four bytes IPv4 address.
+
+[[RSL_IE_IPAC_REMOTE_PORT]]
+==== RSL_IE_IPAC_REMOTE_PORT
+
+This information element contains the remote (MGW side) UDP port in
+network byte order. It is encoded as fixed-size element with one byte
+IEI followed by two bytes UDP port number.
+
+[[RSL_IE_IPAC_LOCAL_PORT]]
+==== RSL_IE_IPAC_LOCAL_PORT
+
+This information element contains the local (BTS side) IPv4 address in
+network byte order. It is encoded as fixed-size element with one byte
+IEI followed by two bytes UDP port number.
+
+[[RSL_IE_IPAC_SPEECH_MODE]]
+==== RSL_IE_IPAC_SPEECH_MODE
+
+This information element encodes the speech mode. It is set according
+to the voice codec used on the connection. It is encoded as a fixed-size
+element of two bytes, with one byte IEI followed by one byte Speech mode
+indicator.
+
+.A-bis/IP Speech Mode Indicator Values
+[options="header",width="40%",cols="20%,80%"]
+|===
+| Value | Description
+| 0x00 | TCH/F with FR codec
+| 0x01 | TCH/F with EFR codec
+| 0x02 | TCH/F with AMR codec
+| 0x03 | TCH/H with HR codec
+| 0x05 | TCH/H with AMR codec
+|===
+
+[[RSL_IE_IPAC_LOCAL_IP]]
+==== RSL_IE_IPAC_LOCAL_IP
+
+This information element contains the local (BTS side) IPv4 address in
+network byte order. It is encoded as fixed-size element with one byte
+IEI followed by four bytes IPv4 address.
+
+[[RSL_IE_IPAC_CONN_STAT]]
+==== RSL_IE_IPAC_CONN_STAT
+
+This information element contains statistics about the RTP connection.
+
+It is encoded as 29 bytes, with the first byte as IEI and 28 bytes
+fixed-length payload encoded as follows:
+
+.A-bis/IP Connection Statistics
+[options="header",width="60%",cols="15%,15%,70%"]
+|===
+| Offset | Size | Description
+| 0 | 4 | Total number of RTP packets sent
+| 4 | 4 | Total number of octets sent
+| 8 | 4 | Total number of RTP packets received
+| 12 | 4 | Total number of octets received
+| 16 | 4 | Total number of lost packets in Rx direction
+| 20 | 4 | Inter-arrival Jitter
+| 24 | 4 | Average transmission delay
+|===
+
+All the above values are encoded in network byte order.
+
+A detailed definition of the individual values is given in RFC 1889.
+
+[[RSL_IE_IPAC_CONN_ID]]
+==== RSL_IE_IPAC_CONN_ID
+
+This IE is a TV with a value length of two bytes. The value is a 16 bit
+connection ID in network byte order.
+
+
+[[RSL_IE_IPAC_RTP_PAYLOAD2]]
+==== RSL_IE_IPAC_RTP_PAYLOAD2
+
+This information element contains the RTP payload identifier, which is
+used in the PT (Payload Type) field of the RTP header in subsequent
+transmissions of the RTP flow.
+
+=== A-bis RSL Initialization / BTS bring-up
+
+Upon receiving the 'IPA RSL CONNECT' OML message by the respective
+'Baseband Transceiver' MO, the BTS proceeds with establishing a separate
+TCP connection for the given TRX.
+
+[[rsl-msc-pri]]
+.A-bis RSL BTS bring-up for primary TRX
+["mscgen"]
+----
+include::rsl-startup-pri.msc[]
+----
+
+[[rsl-msc-sec]]
+.A-bis RSL BTS bring-up for secondary TRXs
+["mscgen"]
+----
+include::rsl-startup-sec.msc[]
+----
+
+The initialization of the primary and secondary TRX slightly differ, as
+illustrated by the differences of <<rsl-msc-pri>> and <<rsl-msc-sec>>.
+Since the secondary TRX has no BCCH, it does not (need to) receive any 'RSL
+BCCH INFORMATION' messages from the BSC.
+
diff --git a/doc/manuals/abis/rtp.adoc b/doc/manuals/abis/rtp.adoc
new file mode 100644
index 00000000..dde56515
--- /dev/null
+++ b/doc/manuals/abis/rtp.adoc
@@ -0,0 +1,33 @@
+== User-Plane Traffic via RTP
+
+RTP (Realtime Transfer Protocol) is a protocol for streaming audio
+and video data. It is specified by IETF RFC 1889.
+
+OsmoBTS A-bis/IP implements RTP as transport medium for circuit-switched
+user-plane traffic, contrary to the E1 sub-slot based transport
+specified in 3GPP TS 08.60.
+
+The RTP transport endpoint parameters are configured using the RSL User
+Plane Transport Management procedures described in <<user_plane_txp_mgmt>>.
+
+RTCP is implemented in addition to RTP, on a UDP port number of the RTP
+port incremented by one.
+
+=== RTP Payload Formats
+
+The RTP payload format depends on the voice codec used on the radio
+channel. The OsmoBTS is simply passing the GSM speech frames between
+the Um radio interface channels and the RTP payload (and vice-versa).
+
+No transcoding function is implemented in the BTS!
+
+.RTP Payload formats
+[options="header",width="60%",cols="15%,15%,70%"]
+|===
+| TCH | Codec | RTP payload format specification
+| TCH/F | FR | IETF RFC 3551 Section 4.5.8
+| TCH/F | EFR | IETF RFC 3551 Section 4.5.9
+| TCH/F | AMR | IETF RFC 4867
+| TCH/H | HR | IETF RFC 5993
+| TCH/H | AMR | IETF RFC 4867
+|===
diff --git a/doc/manuals/chapters/architecture.adoc b/doc/manuals/chapters/architecture.adoc
new file mode 100644
index 00000000..a0e66cd0
--- /dev/null
+++ b/doc/manuals/chapters/architecture.adoc
@@ -0,0 +1,120 @@
+== OsmoBTS software architecture
+
+=== OsmoBTS PHY interface abstraction
+
+The OsmoBTS PHY interface serves as an internal abstraction layer
+between given PHY hardware (as provided by the bts_model) and the actual
+logical transceivers (TRXs) of a BTS inside the OsmoBTS code base.
+
+
+==== PHY link
+
+A PHY link is a physical connection / link towards a given PHY. This
+might be, for example,
+
+* a set of file descriptors to device nodes in the /dev/ directory
+ (sysmobts, litecell15)
+* a packet socket for sending raw Ethernet frames to an OCTPHY
+* a set of UDP sockets for interacting with OsmoTRX
+
+Each PHY interface has a set of attribute/parameters and a list of 1 to
+n PHY instances.
+
+PHY links are numbered 0..n globally inside OsmoBTS.
+
+Each PHY link is configured via the VTY using its individual top-level
+vty node. Given the different bts-model / phy specific properties, the
+VTY configuration options (if any) of the PHY instance differ between
+BTS models.
+
+The PHY links and instances must be configured above the BTS/TRX nodes
+in the configuration file. If the file is saved via the VTY, the code
+automatically ensures this.
+
+
+==== PHY instance
+
+A PHY instance is an instance of a PHY, accessed via a PHY link.
+
+In the case of osmo-bts-sysmo and osmo-bts-trx, there is only one
+instance in every PHY link. This is due to the fact that the API inside
+that PHY link does not permit for distinguishing multiple different
+logical TRXs.
+
+Other PHY implementations like the OCTPHY however do support addressing
+multiple PHY instances via a single PHY link.
+
+PHY instances are numbered 0..n inside each PHY link.
+
+Each PHY instance is configured via the VTY as a separate node beneath each
+PHY link. Given the different bts-model / phy specific properties, the
+VTY configuration options (if any) of the PHY instance differ between
+BTS models.
+
+
+==== Mapping PHY instances to TRXs
+
+Each TRX node in the VTY must use the 'phy N instance M' command in
+order to specify which PHY instance is allocated to this specific TRX.
+
+=== Internal control flow
+
+==== start-up / sequencing during OsmoBTS start
+
+.Control flow at OsmoBTS start-up procedure
+[options="header",cols="10%,35%,55%"]
+|===
+| section | function | description
+| bts-specific | main() | Entering main() from glibc
+| common | bts_main() | initialization of talloc contexts
+| common | bts_log_init() | initialization of logging
+| common | handle_options() | common option parsing
+| bts-specific | bts_model_handle_options() | model-specific option parsing
+| common | gsm_bts_alloc() | allocation of BTS/TRX/TS data structures
+| common | vty_init() | Initialziation of VTY core, libosmo-abis and osmo-bts VTY
+| common | main() | Setting of scheduler RR priority (if configured)
+| common | main() | Initialization of GSMTAP (if configured)
+| common | bts_init() | configuration of defaults in bts/trx/s object
+| bts-specific | bts_model_init | ?
+| common | abis_init() | Initialization of libosmo-abis
+| common | vty_read_config_file() | Reading of configuration file
+| bts-specific | bts_model_phy_link_set_defaults() | Called for every PHY link created
+| bts-specific | bts_model_phy_instance_set_defaults() | Called for every PHY Instance created
+| common | bts_controlif_setup() | Initialization of Control Interface
+| bts-specific | bts_model_ctrl_cmds_install() | Install model-specific control interface commands
+| common | telnet_init() | Initialization of telnet interface
+| common | pcu_sock_init() | Initialization of PCU socket
+| common | main() | Installation of signal handlers
+| common | abis_open() | Start of the A-bis connection to BSC
+| common | phy_links_open() | Iterate over list of configured PHY links
+| bts-specific | bts_model_phy_link_open() | Open each of the configured PHY links
+| common | write_pid_file() | Generate the pid file
+| common | osmo_daemonize() | Fork as daemon in background (if configured)
+| common | bts_main() | Run main loop until global variable quit >= 2
+|===
+
+
+==== At time of OML establishment
+
+.Control flow at time of OML establishment
+[options="header",cols="10%,35%,55%"]
+|===
+| section | function | description
+| bts-specific | bts_model_oml_estab() | Called by core once OML link is established
+| bts-specific | bts_model_check_oml() | called each time OML sets some attributes on a MO, checks if attributes are valid
+| bts-specific | bts_model_apply_oml() | called each time OML sets some attributes on a MO, stores attribute contents in data structures
+| bts-specific | bts_model_opstart() | for NM_OC_BTS, NM_OC_SITE_MANAGER, NM_OC_GPRS_NSE, NM_OC_GPRS_CELL, NMO_OC_GPRS_NSVC
+| bts-specific | bts_model_opstart() | for NM_OC_RADIO_CARRIER for each trx
+| bts-specific | bts_model_opstart() | for NM_OC_BASEB_TRANSC for each trx
+| bts-specific | bts_model_opstart() | for NM_OC_CHANNEL for each timeslot on each trx
+| bts-specific | bts_model_change_power() | change transmit power for each trx (power ramp-up/ramp-down)
+|===
+
+==== At time of RSL connection loss
+
+.Control flow at time of RSL connection loss
+[options="header",cols="10%,35%,55%"]
+|===
+| section | function | description
+| bts-specific | bts_model_abis_close() | called when either one of the RSL links or the OML link are down
+|===
diff --git a/doc/manuals/chapters/bts-models.adoc b/doc/manuals/chapters/bts-models.adoc
new file mode 100644
index 00000000..4ae73c0b
--- /dev/null
+++ b/doc/manuals/chapters/bts-models.adoc
@@ -0,0 +1,441 @@
+[[osmobts_hardware_support]]
+== OsmoBTS hardware support
+
+OsmoBTS consists of a _common_ part that applies to all BTS models as well as
+_hardware-specific_ parts for each BTS model. The hardware specific parts are
+generally referred to as the _bts_model_ code.
+
+The common part includes the core BTS architecture as well as code for
+implementing the external interfaces such as Abis, control, PCU socket and
+GSMTAP.
+
+The bts_model parts include support for driving one particular
+implementation of a GSM physical layer (PHY). Such a physical layer
+implementation can come in many forms. Sometimes it runs on a general
+purpose CPU, sometimes on a dedicated ARM core, a dedicated DSP, a
+combination of DSP and FPGA.
+
+Every PHY implementation offers some kind of primitives by which the PHY
+can be controlled, and by which the PHY exchanges data with the higher
+layers of the protocol stack in the OsmoBTS code.
+
+The PHY-specific primitives are encapsulated in the bts_model code, and
+offered as a PHY-independent _L1SAP_ interface towards the common part of
+OsmoBTS.
+
+In addition, each bts_model implements a set of functions that the
+common part calls. Those functions are pre-fixed by _bts_model__.
+
+Each bts_model may offer
+
+* model-specific VTY commands for both configuration and run-time interaction
+* model-specific command line arguments
+* model-specific control interface commands
+
+== `osmo-bts-sysmo` for sysmocom sysmoBTS
+
+The sysmocom sysmoBTS is a range of GSM BTSs based around an embedded
+system implementing the PHY in a combination of DSP+FPGA. The PHY is
+configured by a set of primitives described by header files. Those
+primitives are exchanged over a set of message queues exposed on the
+Linux-running ARM core via device nodes in `/dev/msgq/`. Internally,
+the message queues map to shared memory between the Linux-running ARM
+core and the DSP running the PHY implementation.
+
+The OsmoBTS bts_model code for the sysmoBTS can be found in the
+`src/osmo-bts-sysmo` sub-directory of the OsmoBTS code base.
+
+`osmo-bts-sysmo` has been the primary target platform for
+OsmoBTS for many years and is thus the most feature-complete and mature
+platform supported by OsmoBTS at this point.
+
+The sysmoBTS PHY supports a direct PHY interface to OsmoPCU, reducing
+the latency and amount of primitives that OsmoBTS would otherwise need
+to pass through from the PHY message queues to the PCU socket and
+vice-versa.
+
+
+=== `osmo-bts-sysmo` specific command line arguments
+
+*--dsp-trace 'DSPMASK'*::
+ Set the DSP trace flags (a single hexadecimal 32bit value).
+ This has been deprecated by VTY based commands, see
+ <<osmo-bts-sysmo-dsp-trace>> for further information.
+*--pcu-direct*::
+ Indicate that an external PCU (e.g. OsmoPCU) will directly
+ open the DSP message queues to the PHY / PH-SAP, and only MPH
+ primitives are passed via OsmoBTS.
+
+
+=== `osmo-bts-sysmo` specific VTY commands
+
+For a auto-generated complete syntax reference of the VTY commands,
+please see the associated _OsmoBTS VTY reference manual_
+<<vty-ref-osmobts>>. The section
+below only lists the most important commands.
+
+==== at the 'SHOW' node
+
+===== `show trx 0 clock-source`
+
+Display the currently active clock source configuration for the TRX
+
+[[osmo-bts-sysmo-dsp-trace]]
+===== `show trx 0 dsp-trace-flags`
+
+Show the currently active DSP trace flags for the TRX
+
+===== `trx 0 dsp-trace-flag`
+
+Use this command to enable/disable/configure the DSP tracing flags that
+define what debug messages will appear on `/dev/rtfifo/dsp_trace`.
+
+==== at the 'ENABLE' node
+
+===== `trx 0 tx-power <-110-100>`
+
+Change the current TRX transmit power to the given value in dBm.
+
+===== `trx 0 rf-clock-info reset`
+
+Part of the clock calibration procedure:
+Reset the clock correction value.
+
+===== `trx 0 rf-clock-info correct`
+
+Part of the clock calibration procedure:
+Apply the current measured correction value between the reference clock
+and the local clock.
+
+==== at the 'PHY instance' node
+
+==== `clock-calibration eeprom`
+
+Obtain clock calibration value from EEPROM.
+
+==== `clock-calibration default`
+
+Use hardware default clock calibration value.
+
+==== `clock-calibration <-4095-4095>`
+
+Use specified clock calibration value (not EEPROM/default).
+
+==== `clock-source (tcxo|ocxo|ext|gps)`
+
+Specify the clock source for the PHY:
+
+tcxo::
+ Use the TCXO. This is the default on sysmoBTS 2050.
+ocxo::
+ Use the OCXO (only valid on units equipped with OCXO). This is
+ the default on all sysmoBTS 1002/1020/1100 and SOB-BTS.
+ext::
+ Use the external clock input.
+gps::
+ Use the clock derived from GPS. You shouldn't use this clock
+ directly, but rather use the TCXO and regularly re-calibrate
+ against GPS.
+
+==== `trx-calibration-path PATH`
+
+Use calibration files from the given 'PATH', rather tan calibration
+values from the EEPROM.
+
+=== `osmo-bts-sysmo` specific control interface commands
+
+==== trx.0.clock-info
+
+Obtain information on the current clock status:
+
+----
+bsc_control.py -d localhost -p 4238 -g trx.0.clock-info
+Got message: GET_REPLY 1 trx.0.clock-info -100,ocxo,0,0,gps
+----
+
+which is to be interpreted as:
+
+* current clock correction value is -100 ppb
+* current clock source is OCXO
+* deviation between clock source and calibration source is 0 ppb
+* resolution of clock error measurement is 0 ppt (0 means no result yet)
+* current calibration source is GPS
+
+When this attribute is set, any value passed on is discarded, but the clock
+calibration process is re-started.
+
+==== trx.0.clock-correction
+
+This attribute can get and set the current clock correction value:
+
+----
+bsc_control.py -d localhost -p 4238 -g trx.0.clock-correction
+Got message: GET_REPLY 1 trx.0.clock-correction -100
+----
+
+----
+bsc_control.py -d localhost -p 4238 -s trx.0.clock-correction -- -99
+Got message: SET_REPLY 1 trx.0.clock-correction success
+----
+
+
+== `osmo-bts-trx` for OsmoTRX
+
+OsmoTRX is a C-language implementation of the GSM radio modem,
+originally developed as the 'Transceiver' part of OpenBTS. This radio
+modem offers an interface based on top of UDP streams.
+
+The OsmoBTS bts_model code for OsmoTRX is called
+`osmo-bts-trx`. It implements the UDP stream interface of
+OsmoTRX, so both parts can be used together to implement a complete GSM
+BTS based on general-purpose computing SDR.
+
+As OsmoTRX is general-purpose software running on top of Linux, it is thus not
+tied to any specific physical hardware. At the time of this writing, OsmoTRX
+supports a variety of Lime Microsystems and Ettus USRP SDRs via the UHD driver,
+as well as the Fairwaves UmTRX and derived products.
+
+OsmoTRX is not a complete GSM PHY but 'just' the radio modem. This
+means that all of the Layer 1 functionality such as scheduling,
+convolutional coding, etc. is actually also implemented inside OsmoBTS.
+
+As such, the boundary between OsmoTRX and `osmo-bts-trx` is at
+a much lower interface, which is an internal interface of other more
+traditional GSM PHY implementations.
+
+Besides OsmoTRX, there are also other implementations (both Free
+Software and proprietary) that implement the same UDP stream based radio
+modem interface.
+
+
+=== `osmo-bts-trx` specific VTY commands
+
+For a auto-generated complete syntax reference of the VTY commands,
+pleas see the associated _OsmoBTS VTY reference manual_
+<<vty-ref-osmobts>>. The section below only lists the most important
+commands.
+
+==== at the 'SHOW' node
+
+===== `show transceivers`
+
+Display information about configured/connected OsmoTRX transceivers in
+human-readable format to current VTY session.
+
+==== at the 'PHY' configuration node
+
+===== `osmotrx ip HOST`
+
+Set the IP address for the OsmoTRX interface for both the local (OsmoBTS) and
+remote (OsmoTRX) side of the UDP flows. This option has been deprecated by the
+more detailed option `osmotrx ip (local|remote) A.B.C.D`.
+
+===== `osmotrx ip (local|remote) A.B.C.D`
+
+Set the IP address for the OsmoTRX interface for either the local (OsmoBTS) or
+remote (OsmoTRX) side of the UDP flows.
+
+===== `osmotrx base-port (local|remote) <0-65535>`
+
+Configure the base UDP port for the OsmoTRX interface for either the
+local (OsmoBTS) or remote (OsmoTRX) side of the UDP flows.
+
+===== `osmotrx fn-advance <0-30>`
+
+Set the number of frames to be transmitted to transceiver in advance of
+current GSM frame number.
+
+===== `osmotrx rts-advance <0-30>`
+
+Set the number of frames to be requested from PCU in advance of current
+frame number. Do not change this unless you have a good reason!
+
+===== `osmotrx rx-gain <0-50>`
+
+Set the receiver gain (configured in the hardware) in dB.
+
+===== `osmotrx tx-attenuation <0-50>`
+
+Set the transmitter attenuation (configured in the hardware) in dB.
+
+===== `osmotrx tx-attenuation oml`
+
+Use the Value in the A-bis OML Attribute `MAX_POWER_REDUCTION` as
+transmitter attenuation.
+
+==== at the 'PHY Instance' configuration node
+
+===== `slotmask (1|0) (1|0) (1|0) (1|0) (1|0) (1|0) (1|0) (1|0)`
+
+Configure which timeslots should be active on this TRX. Normally all
+timeslots are enabled, unless you are running on a cpu-constrained
+deeply embedded system.
+
+===== `osmotrx maxdly <0-31>`
+
+Set the maximum delay for received symbols (in number of GSM symbols).
+
+
+== `osmo-bts-octphy` for Octasic OCTPHY-2G
+
+The Octasic OCTPHY-2G is a GSM PHY implementation inside an Octasic
+proprietary 24-core DSP called OCTDSP.
+
+This DSP has a built-in Gigabit Ethernet interface, over which it
+exchanges PHY-layer primitives in raw Ethernet frames with the upper
+layers running on another CPU attached to the same Ethernet. Those
+primitives are described in a set of C-language header files.
+
+OsmoBTS implements the raw Ethernet frame based primitives as well as
+the associated transport protocol (OKTPKT/OCTVC1) in the
+`osmo-btso-octphy` bts_model code.
+
+You can run the `osmo-bts-octphy` on any system connected to the same
+Ethernet as the OCTDSP running the OCTPHY. This can be either an
+embedded ARM or x86 SoM part of the OCTBTS hardware, or it can be any
+other Linux system attached via an Ethernet switch.
+
+Each OCTDSP running OCTSDR-2G offers a set of primitives part of a
+OCTPKT session, which is mapped to an OsmoBTS PHY link. Depending on
+the OCTSDR-2G software version, you may create multiple software TRX by
+creating multiple OsmoBTS PHY instances inside that PHY link.
+
+Multiple DSPs may exist in one circuit board, then each of the DSPs is
+interfaced by one OsmoBTS PHY link, and each of them may have one or
+more OsmoBTS PHY instances creating a Multi-TRX configuration.
+
+
+== `osmo-bts-litecell15` for Nutaq/Nuran LiteCell 1.5
+
+The Nutaq/Nuran LiteCell 1.5 implements a dual-transceiver GSM BTS based
+on a mixed ARM/DSP/FPGA architecture. The PHY layer is implemented on
+DSP/FPGA and similar to that of the sysmoBTS: It exchanges primitives
+described in a set of C-language header files over message queues
+between the ARM and the DSP.
+
+This interface is implemented in the `osmo-bts-litecell15` bts_model of
+OsmoBTS. You would run `osmo-bts-litecell15` on the ARM/Linux processor
+of the Litecell 1.5.
+
+The two transceivers of the Litecell 1.5 each have their own set of DSP
+message queues. Each set of message queues is wrapped into one OsmoBTS
+PHY link, offering one OsmoBTS PHY instance.
+
+The Litecell 1.5 PHY supports a direct PHY interface to OsmoPCU,
+reducing the latency and amount of primitives that OsmoBTS would
+otherwise need to pass through from the PHY message queues to the PCU
+socket and vice-versa.
+
+=== `osmo-bts-trx` specific VTY commands
+
+For a auto-generated complete syntax reference of the VTY commands,
+please see the associated _OsmoBTS VTY reference manual_
+<<vty-ref-osmobts>>. The section below only lists the most important
+commands.
+
+==== at the 'SHOW' node
+
+===== `show phy <0-255> system-information`
+
+Show information about the hardware platform, DSP and OCTPHY-2G software
+version.
+
+===== `show phy <0-255> rf-port-stats <0-1>`
+
+Show information about the RF port interfaces.
+
+===== `show phy <0-255> clk-sync-stats`
+
+Show information about the clock synchronization manager.
+
+==== at the 'PHY' configuration node
+
+===== `octphy hw-addr HWADDR`
+
+Specify the Ethernet hardware address (mac address) of the DSP running
+the OCTPHY-2G software for this PHY link.
+
+===== `octphy net-device NAME`
+
+Specify the Ethernet network device (like `eth0`) through which the DSP
+can be reached from OsmoBTS.
+
+===== `octphy rf-port-index <0-255>`
+
+Specify which RF port should be used for this PHY link.
+
+===== `octphy rx-gain <0-73>`
+
+Configure the receiver gain in dB.
+
+===== `octphy tx-attenuation <0-359>`
+
+Configure the transmitter attenuation in quarter-dB
+
+
+
+
+== `osmo-bts-virtual` for Virtual Um Interface
+
+This is a special BTS model used for research, simulation and testing.
+Rather than communicating over a wireless RF interface, the GSM Um
+messages are encapsulated over GSMTAP/UDP/IP.
+
+The Virtual Um interface (i.e. virtual radio layer) between OsmoBTS and
+OsmocomBB allows us to run a complete GSM network with 1-N BTSs and 1-M
+MSs without any actual radio hardware, which is of course excellent for
+all kinds of testing scenarios.
+
+The Virtual Um layer is based on sending L2 frames (blocks) encapsulated
+via GSMTAP UDP multicast packets. There are two separate multicast
+groups, one for uplink and one for downlink. The multicast nature
+simulates the shared medium and enables any simulated phone to receive
+the signal from multiple BTSs via the downlink multicast group.
+
+In OsmoBTS, this is implemented via the `osmo-bts-virtual` BTS model.
+
+Setting up OsmoBTS in its `osmo-bts-virtual` flavor isn't really much
+different from setting it up with real hardware. The amount of required
+configuration at the BTS configuration file is (as always) very minimal,
+as in the GSM network architecture provides almost all relevant
+configuration to the BTS from the BSC.
+
+An example configuratin file is provided as part of the osmo-bts source
+code: `doc/examples/virtual/osmobts-virtual.cfg`
+
+For more information see
+http://osmocom.org/projects/cellular-infrastructure/wiki/Virtual_Um
+
+=== `osmo-bts-virtual` specific VTY commands
+
+For a auto-generated complete syntax reference of the VTY commands,
+please see the associated _OsmoBTS VTY reference manual_
+<<vty-ref-osmobts>>. The section below only lists the most important
+commands.
+
+==== at the 'PHY' config node
+
+===== `virtual-um net-device NETDEV`
+
+Configure the network device used for sending/receiving the virtual Um
+interface messages (e.g. `eth0`).
+
+===== `virtual-um ms-udp-port <0-65535>`
+
+Configure the UDP port used for sending virtual Um
+downlink messages towards the MS (default: GSMTAP 4729).
+
+===== `virtual-um ms-multicast-group GROUP`
+
+Configure the IP multicast group used for sending virtual
+Um downlink messages towards the MS (default: 239.193.23.1)
+
+===== `virtual-um bts-udp-port <0-65535>`
+
+Configure the UDP port used for receiving virtual Um
+uplink messages from the MS (default: GSMTAP 4729).
+
+===== `virtual-um bts-multicast-group GROUP`
+
+Configure the IP multicast group used for receiving virtual
+Um uplink messages from the MS (default: 239.193.23.2)
diff --git a/doc/manuals/chapters/configuration.adoc b/doc/manuals/chapters/configuration.adoc
new file mode 100644
index 00000000..558bd4ba
--- /dev/null
+++ b/doc/manuals/chapters/configuration.adoc
@@ -0,0 +1,210 @@
+== BTS Configuration
+
+The role of the BTS is to handle the GSM radio interface. When the BTS
+application is starting, the A-bis OML connection is established towards
+the BSC. Almost all BTS configuration (such as ARFCN, channel
+configuration, transmit power, etc.) will be sent from the BSC to the
+BTS via OML messages. After OML start-up has completed, the BSC will
+instruct the BTS to establish the RSL connections.
+
+Given that most configuration is downloaded from the BSC into the BTS at
+start-up time, only some very basic settings have to be made in the
+OsmoBTS software.
+
+
+=== Command Line Options
+
+Ths OsmoBTS executables (`osmo-bts-sysmo`, `osmo-bts-trx`,
+`osmo-bts-octphy`, `osmo-bts-litecell15`, ...) share the following
+generic command line options:
+
+==== SYNOPSIS
+*osmo-bts-sysmo* [-h|-V] [-d 'DBGMASK'] [-D] [-c 'CONFIGFILE' ] [-s] [-T] [-e 'LOGLEVEL'] [-r 'PRIO'] [-i 'GSMTAP-IP'] [-t <1-255>]
+
+==== OPTIONS
+*-h, --help*::
+ Print a short help message about the supported options
+*-V, --version*::
+ Print the compile-time version number of the OsmoBTS program
+*-d, --debug 'DBGMASK','DBGLEVELS'*::
+ Set the log subsystems and levels for logging to stderr. This
+ has mostly been superseded by VTY-based logging configuration,
+ see <<logging>> for further information.
+*-D, --daemonize*::
+ Fork the process as a daemon into background.
+*-c, --config-file 'CONFIGFILE'*::
+ Specify the file and path name of the configuration file to be
+ used. If none is specified, use `osmo-bts.cfg` in the current
+ working directory.
+*-s, --disable-color*::
+ Disable colors for logging to stderr. This has mostly been
+ deprecated by VTY based logging configuration, see <<logging>>
+ for further information.
+*-T, --timestamp*::
+ Enable time-stamping of log messages to stderr. This has mostly
+ been deprecated by VTY based logging configuration, see
+ <<logging>> for further information.
+*-e, --log-level 'LOGLEVEL'*::
+ Set the global log level for logging to stderr. This has mostly
+ been deprecated by VTY based logging configuration, see
+ <<logging>> for further information.
+*-r, --realtime 'PRIO'*::
+ Enable use of the Linux kernel realtime priority scheduler with
+ the specified priority.
+ It is recommended you use this option on low-performance
+ embedded systems or systems that encounter high non-GSM/GPRS
+ load.
+*-i, --gsmtap-ip 'GSMTAP-IP'*::
+ Specify the destination IP address for GSMTAP messages.
+*-t, --trx-num <1-255>*::
+ Specify the number of TRX supported by this BTS.
+
+There may be additional, hardware specific command line options by the
+different bts_model implementations.
+
+
+=== Configuration using the VTY
+
+Most configuration as well as run-time monitoring and system
+introspection is implemented using a command-line based interface
+called _VTY_. A full reference syntax of all existing VTY command is
+available as a separate document.
+
+See <<vty>> for further information on the VTY.
+
+
+==== Required BTS/TRX configuration
+
+There are some settings that have to be configured locally in the
+sysmoBTS, as they cannot be set remotely from the BSC. Those
+settings are stored in the OsmoBTS configuration file, which commonly
+is stored in `/etc/osmocom/osmo-bts.cfg`.
+
+.Example Minimal configuration file
+----
+!
+! OsmoBTS (0.0.1.100-0455) configuration saved from vty
+!!
+!
+phy 0 <1>
+ instance 0 <2>
+bts 0 <3>
+ band DCS1800
+ ipa unit-id 1801 0 <4>
+ oml remote-ip 192.168.100.11 <5>
+ trx 0 <6>
+ phy 0 instance 0 <7>
+----
+<1> You must configure at least one PHY link by means of the PHY node
+<2> You must configure at least one PHY instance in the PHY link
+<3> There is always exactly one BTS (`bts 0`) configured in OsmoBTS
+<4> The `ipa unit-id` is what is used to identify this BTS to the BSC
+<5> The OML Remote IP is the IP address of the BSC, to which the BTS shall connect to.
+<6> There must be at least one trx (`trx 0`) in each BTS
+<7> Every TRX must be mapped to a specific PHY instance this way
+
+For a full reference of all available VTY configuration parameters,
+please refer to the OsmoBTS VTY Reference document.
+
+[[gsmtap]]
+==== Configuring GSMTAP tracing
+
+In addition to being able to obtain pcap protocol traces of the A-bis
+communication and the text-based logging from the OsmoBTS
+software, there is also the capability of tracing all communication on
+the radio interface. To do so, OsmoBTS can encapsulate
+MAC blocks (23byte messages at the L2-L1 interface) into _GSMTAP_ and send
+them via UDP/IP. At that point, they can be captured with utilities like
+*tcpdump* or *tshark* for further analysis by the *wireshark* protocol
+analyzer.
+
+In order to activate this feature, you first need to make sure to start
+OsmoBTS using the `-i` or `--gsmtap-ip` command line option, specifying
+the destination IP address for the GSMTAP messages. In most cases,
+using 127.0.0.1 for passing the messages over the loopback (`lo`) device
+will be sufficient.
+
+OsmoBTS can selectively trace such messages by their L1 SAPI, for both
+Rx and Tx. For a complete list of L1 SAPI values, please refer to the
+_OsmoBTS VTY reference manual_ <<vty-ref-osmobts>>.
+
+For example, to enable GSMTAP tracing for messages on all SDCCH
+channels, you can use the gsmtap-sapi sdcch command at the CONFIG TRX
+node of the OsmoBTS VTY.
+
+.Example: Enabling GSMTAP for SDCCH
+----
+OsmoBTS> enable
+OsmoBTS# configure terminal
+OsmoBTS(config)# bts 0
+OsmoBTS(bts)# trx 0
+OsmoBTS(trx)# gsmtap-sapi sdcch
+OsmoBTS(trx)# write <1>
+----
+<1> the `write` command will make the configuration persistent in the
+configuration file. This is not required if you wish to enable GSMTAP
+only in the current session of OsmoBTS.
+
+De-activation can be performed similarly by using the `no gsmtap-sapi
+sdcch` command at the `trx` node of the OsmoBTS VTY.
+
+From the moment they are enabled via VTY, GSMTAP messages will be
+generated and sent in UDP encapsulation to the IANA-registered UDP port
+for GSMTAP (4729) at the IP address specified in the command line
+argument.
+
+==== Configuring power ramping
+
+OsmoBTS can ramp up the power of its trx over time. This helps reduce
+cell congestion in busy environments.
+
+In this example, the trx starts with 5dBm output power which increases by 1dB
+every two seconds until it reaches nominal power.
+Power ramping can use the power-ramp commands at the CONFIG TRX node of the
+OsmoBTS VTY.
+
+.Example: Configure power ramping on trx 0
+----
+OsmoBTS> enable
+OsmoBTS# configure terminal
+OsmoBTS(config)# bts 0
+OsmoBTS(bts)# trx 0
+OsmoBTS(trx)# power-ramp max-initial 5 dBm
+OsmoBTS(trx)# power-ramp step-size 1 dB
+OsmoBTS(trx)# power-ramp step-interval 2
+OsmoBTS(trx)# write <1>
+----
+<1> the `write` command will make the configuration persistent in the
+configuration file.
+
+De-activating power-ramping can be performed by setting the max-initial value
+to the nominal power. The default max-initial value is 23 dBm.
+
+
+==== Running multiple instances
+
+It is possible to run multiple instances of `osmo-bts` on one and the same
+machine, if the phy-interface is flexible enough to distinguish between
+different phy hardware interfaces.
+
+Since usually a BTS instance runs in conjunction with a dedicated PCU instance,
+the socket path between PCU and BTS has to be distinguished between the running
+instances. It is possible to change the default socket path via VTY config:
+
+.Example: Personalize PCU socket path
+----
+bts 0
+ pcu-socket /tmp/pcu_bts_2
+----
+
+It is also necessary to separate the VTY anc CTRL interfaces of the different
+instances. The VTY, as well as the CTRL interface can be bound to a free IP
+address from the loopback range:
+
+.Example: Binding VTY and CTRL interface to a specific IP address
+----
+line vty
+ bind 127.0.0.2
+ctrl
+ bind 127.0.0.2
+----
diff --git a/doc/manuals/chapters/control.adoc b/doc/manuals/chapters/control.adoc
new file mode 100644
index 00000000..3b21669b
--- /dev/null
+++ b/doc/manuals/chapters/control.adoc
@@ -0,0 +1,24 @@
+[[control]]
+== Control interface
+
+The actual protocol is described in <<common-control-if>>, the variables
+common to all programs using it are described in <<ctrl_common_vars>>. Here we
+describe variables specific to OsmoBTS. The commands starting with prefix
+"net.btsN." are specific to a certain BTS so N have to be replaced with BTS
+number when issuing command. Similarly the
+TRX-specific commands are additionally prefixed with TRX number e. g.
+"net.bts1.trx2.thermal-attenuation".
+
+
+.Variables available over control interface
+[options="header",width="100%",cols="20%,5%,5%,50%,20%"]
+|===
+|Name|Access|Trap|Value|Comment
+|net.btsN.trxM.thermal-attenuation|RW|No|integer|See <<ther>> for details.
+|===
+
+[[ther]]
+=== thermal-attenuation
+
+Allowed SET value for thermal attenuation is between 0 to 40 dB. Note: the value
+is SET in dB units but GET will return value in mdB units used internally.
diff --git a/doc/manuals/chapters/dynamic-timeslots.adoc b/doc/manuals/chapters/dynamic-timeslots.adoc
new file mode 100644
index 00000000..7c43d187
--- /dev/null
+++ b/doc/manuals/chapters/dynamic-timeslots.adoc
@@ -0,0 +1,20 @@
+== Support for Dynamic Timeslots (TCH/F, TCH/H, PDCH)
+
+OsmoBTS supports dynamic switchover of timeslots between different physical
+channel configurations, initiated by the BSC via (non-standard) Abis messages
+-- see the _OsmoBTS Abis Protocol Specification_ <<osmobts-abis-spec>>.
+
+The Abis message handling for dynamic timeslots is independent of the BTS
+model. However, dynamic switchover will only work for BTS models that implement
+the internal API to reconnect a timeslot (_bts_model_ts_disconnect()_ and
+_bts_model_ts_connect()_, see also <<osmobts_hardware_support>>).
+
+Currently, these OsmoBTS models support dynamic timeslots:
+
+* _osmo-bts-sysmo_
+* _osmo-bts-litecell15_
+* _osmo-bts-trx_
+
+Dynamic timeslots are driven by the BSC and need to be configured there. When
+using OsmoBSC or OsmoNITB, see the BTS configuration chapter on dynamic
+timeslots in <<userman-osmobsc>> or <<userman-osmonitb>>, respectively.
diff --git a/doc/manuals/chapters/interfaces.adoc b/doc/manuals/chapters/interfaces.adoc
new file mode 100644
index 00000000..9fefa729
--- /dev/null
+++ b/doc/manuals/chapters/interfaces.adoc
@@ -0,0 +1,156 @@
+== OsmoBTS Interfaces
+
+OsmoBTS offers a set of interfaces to interact with external entities:
+
+* A-bis/IP interface to talk to the BSC
+* bts_model specific PHY interface
+* VTY interface
+* Osmocom control interface
+* GSMTAP interface
+* PCU interface
+
+
+=== OsmoBTS Abis/IP Interface
+
+OsmoBTS implements the GSM A-bis interface as described in the relevant
+3GPP specifications:
+
+* A-bis RSL according to 3GPP TS 08.58
+* A-bis OML according to 3GPP TS 12.21
+
+As the 3GPP specifies A-bis only over E1 interfaces and not over IP,
+significant enhancements and modifications to the 3GPP specifications are
+employed. Nevertheless, the implementation tries to stay as close as
+possible to the 3GPP specifications.
+
+Please see the _OsmoBTS Abis Protocol Specification_
+<<osmobts-abis-spec>> for more information on this subject.
+
+
+=== bts_model specific PHY interface
+
+This interface is specific to the bts_model that OsmoBTS was compiled
+for. It can take any form as required by the respective hardware.
+
+Please see the PHY documentation of your respective BTS hardware for more
+details.
+
+
+=== OsmoBTS VTY Interface
+
+See <<vty>> for further information.
+
+
+=== OsmoBTS Control Interface
+
+The general structure of the Omsocom control interface is described in
+<<common-control-if>>.
+
+The number of control interface commands/attributes is currently quite
+limited and largely depends on the bts_model used.
+
+==== trx.N.thermal-attenuation
+
+The idea of this parameter is to attenuate the system output power as part of
+thermal management. In some cases the PA might be passing a critical level,
+so an external control process can use this attribute to reduce the system
+output power.
+
+Please note that all values in the context of transmit power calculation
+are integers in milli-dB (1/10000 bel), so the below example is setting
+the attenuation at 3 dB:
+
+----
+bsc_control.py -d localhost -p 4238 -s trx.0.thermal-attenuation 3000
+Got message: SET_REPLY 1 trx.0.thermal-attenuation 3000
+----
+
+----
+bsc_control.py -d localhost -p 4238 -g trx.0.thermal-attenuation
+Got message: GET_REPLY 1 trx.0.thermal-attenuation 3000
+----
+
+
+
+=== OsmoBTS GSMTAP Interface
+
+GSMTAP is a standard created by Osmocom to UDP-encapsulate GSM protocol
+messages normally communicated over non-IP interfaces for the primary
+purpose of protocol analysis in the wireshark dissector.
+
+The initial purpose was to encapsulate GSM Um frames including some
+meta-data like ARFCN and GSM frame number into something that can be
+parsed and dispatched within the wireshark dissector.
+
+This interface has since been extended to many other
+GSM/GPRS/UMTS interfaces and protocols, and even to TETRA and GMR.
+
+In OsmoBTS, it is possible to export both uplink and downlink Um
+messages via GSMTAP. There is a set of VTY configuration options to
+specify for which logical channels of the Um interface GSMTAP messages
+shall be emitted, and to which destination IP address they shall be
+sent.
+
+Using GSMTAP it is possible to place a virtual tap at the air interface
+between BTS and MS, without going through the trouble of setting up an
+actual radio receiver at the same frequencies. Also, GSMTAP export is
+performed before the Um air-interface encryption (A5) is performed, so
+all frames are always in plain text.
+
+Please refer to <<gsmtap>> for more information on how to configure and
+use this interface.
+
+
+=== OsmoBTS PCU Socket Interface
+
+In order to assist the provisioning of GPRS services over the same radio
+interface as circuit-switched GSM, OsmoBTS exposes a Unix domain socket
+based interface towards OsmoPCU.
+
+OsmoPCU is the Osmocom implementation of the GPRS Packet Control Unit
+(PCU), which is co-located with the BTS in the Osmocom implementation.
+Contrary to that, many classic E1-based implementations of the GSM RAN
+co-locate the PCU with the BSC. However, the GSM specifications keep
+the location up to the implementor.
+
+The GPRS network architecture is shown in <<fig-gprs-pcubts>>.
+
+[[fig-gprs-pcubts]]
+.GPRS network architecture
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="MS"];
+ MS1 [label="MS"];
+ BTS;
+ BSC;
+ MSC;
+ PCU;
+ SGSN;
+ GGSN;
+ MS0->BTS [label="Um"];
+ MS1->BTS [label="Um"];
+ BTS->BSC [label="Abis"];
+ BSC->MSC [label="A"];
+ BTS->PCU [label="pcu_sock"];
+ PCU->SGSN [label="Gb"];
+ SGSN->GGSN [label="GTP"];
+}
+----
+
+The PCU socket interface serves the following purposes:
+
+* to pass PCU relevant configuration from BTS to PCU
+* to forward paging requests from BTS to PCU
+* to forward RACH Requests from BTS to PCU
+
+Depending on your bts_model, the PCU may also be passing actual
+PH-DATA.request / PH-DATA.indication / PH-RTS.indication primitives for
+the PDCH. This is considered sub-optimal, and some BTS models offer a
+direct interface by which the PCU can exchange those primitives directly
+with the PHY.
+
+The default PCU socket interface name is `/tmp/pcu_sock`, but this can
+be overridden by the `pcu-socket` VTY command in the BTS configuration
+VTY node.
diff --git a/doc/manuals/chapters/overview.adoc b/doc/manuals/chapters/overview.adoc
new file mode 100644
index 00000000..6b6b8284
--- /dev/null
+++ b/doc/manuals/chapters/overview.adoc
@@ -0,0 +1,105 @@
+== Overview
+
+=== About this manual
+
+This manual should help you getting started with the OsmoBTS software.
+It will cover aspects of configuring and running OsmoBTS as well as some
+introduction about its internal architecture and external interfaces.
+
+=== About OsmoBTS
+
+OsmoBTS is an implementation of a GSM BTS (Base Transceiver Station). A
+BTS serves as the interface between the Um radio interface towards
+phones and the wired Abis interface towards the BSC (Base Station
+Controller). It also implements the network side of the Layer 2 of the
+Um radio interface: The LAPDm protocol.
+
+OsmoBTS is licensed as Free and Open Source Software (FOSS) under _GNU
+AGPLv3_ <<gnu-agplv3>>. It is developed as one GSM network
+infrastructure component part of the overall Osmocom project.
+
+As perhaps the first implementation of a GSM BTS ever in the industry,
+OsmoBTS is implemented in a vendor-independent way and supports a large
+variety of transceiver hardware and physical layer implementations from
+many vendors.
+
+=== Credits
+
+OsmoBTS was originally developed in 2011 by Andreas Eversberg and Harald
+Welte. It has since been maintained by Harald Welte and Holger Freyther
+at sysmocom.
+
+=== OsmoBTS in the Osmocom GSM network architecture
+
+OsmoBTS can be used in combination with the various other GSM network
+elements developed under the umbrella of the Osmocom project.
+
+Typical configurations either use OsmoBTS with OsmoBSC, or with
+OsmoNITB, as can be seen in the following figures.
+
+[[fig-gsm-classic]]
+.Classic GSM archtiecture using OsmoBTS with OsmoBTS components
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="MS"]
+ MS1 [label="MS"]
+ MS2 [label="MS"]
+ MS3 [label="MS"]
+ BTS0 [label="OsmoBTS"]
+ BTS1 [label="OsmoBTS"]
+ BSC [label="OsmoBSC"]
+ MSC [label="MSC/VLR"]
+ HLR [label="HLR/AUC"]
+ MS0->BTS0 [label="Um"]
+ MS1->BTS0 [label="Um"]
+ MS2->BTS1 [label="Um"]
+ MS3->BTS1 [label="Um"]
+ BTS0->BSC [label="Abis"]
+ BTS1->BSC [label="Abis"]
+ BSC->MSC [label="A"]
+ MSC->HLR [label="C"]
+ MSC->EIR [label="F"]
+ MSC->SMSC
+}
+----
+
+
+[[fig-gsm-nitb]]
+.GSM architecture using OsmoBTS + OsmoNITB
+[graphviz]
+----
+digraph G {
+ rankdir=LR;
+ MS0 [label="MS"]
+ MS1 [label="MS"]
+ MS2 [label="MS"]
+ MS3 [label="MS"]
+ BTS0 [label="OsmoBTS"]
+ BTS1 [label="OsmoBTS"]
+ MS0->BTS0 [label="Um"]
+ MS1->BTS0 [label="Um"]
+ MS2->BTS1 [label="Um"]
+ MS3->BTS1 [label="Um"]
+ BTS0->BSC [label="Abis"]
+ BTS1->BSC [label="Abis"]
+ subgraph cluster_nitb {
+ label = "OsmoNITB";
+ BSC
+ MSC [label="MSC/VLR"]
+ HLR [label="HLR/AUC"]
+ BSC->MSC [label="A"]
+ MSC->HLR [label="C"]
+ MSC->EIR [label="F"]
+ MSC->SMSC;
+ }
+}
+----
+
+If intended by the user, it is of course also possible to implement an
+OsmoBTS-compatible Abis-over-IP interface in any third party BSC. The
+Abis/IP interface and its protocol are documented in the _OsmoBTS
+Abis Protocol Specification_ <<osmobts-abis-spec>>. However, be advised
+that such a configuration is currently not officially supported by
+Osmocom.
diff --git a/doc/manuals/dtx.dot b/doc/manuals/dtx.dot
new file mode 100644
index 00000000..b9f0b5f2
--- /dev/null
+++ b/doc/manuals/dtx.dot
@@ -0,0 +1,85 @@
+digraph dtx_dl_amr_fsm {
+ node [shape = doublecircle] ST_VOICE ST_FACCH ST_U_NOINH
+ node [shape = circle]
+
+ // default state for non-DTX and DTX when SPEECH is in progress
+ ST_VOICE -> ST_SID_F1 [ label = "E_SID_F" ]
+ ST_VOICE -> ST_F1_INH_V [ label = "E_INHIB" ]
+ ST_VOICE -> ST_U_NOINH [ label = "E_SID_U" ]
+ ST_VOICE -> ST_VOICE [ label = "E_VOICE" ]
+ ST_VOICE -> ST_VOICE [ label = "E_FACCH" ]
+
+ // SID-FIRST or SID-FIRST-P1 in case of AMR HR: start of silence period (might be interrupted in case of AMR HR)
+ ST_SID_F1 -> ST_SID_F1 [ label = "E_SID_F" ]
+ ST_SID_F1 -> ST_U_NOINH [ label = "E_SID_U" ]
+ ST_SID_F1 -> ST_F1_INH_F [ label = "E_FACCH" ]
+ ST_SID_F1 -> ST_SID_F2 [ label = "E_FIRST" ]
+ ST_SID_F1 -> ST_ONSET_V [ label = "E_ONSET" ]
+
+ // SID-FIRST P2 (only for AMR HR): actual start of silence period in case of AMR HR
+ ST_SID_F2 -> ST_U_NOINH [ label = "E_COMPL" ]
+ ST_SID_F2 -> ST_ONSET_F [ label = "E_FACCH" ]
+ ST_SID_F2 -> ST_ONSET_V [ label = "E_ONSET" ]
+
+ // SID-FIRST Inhibited: incoming SPEECH (only for AMR HR)
+ ST_F1_INH_V -> ST_F1_INH_V_REC [ label = "E_COMPL" ]
+
+ // SID-FIRST Inhibited: incoming FACCH frame (only for AMR HR)
+ ST_F1_INH_F -> ST_F1_INH_F_REC [ label = "E_COMPL" ]
+
+ // SID-UPDATE Inhibited: incoming SPEECH (only for AMR HR)
+ ST_U_INH_V -> ST_U_INH_V_REC [ label = "E_COMPL" ]
+
+ // SID-UPDATE Inhibited: incoming FACCH frame (only for AMR HR)
+ ST_U_INH_F -> ST_U_INH_F_REC [ label = "E_COMPL" ]
+
+ // Silence period with periodic comfort noise data updates (no Inhibition)
+ ST_U_NOINH -> ST_ONSET_F [ label = "E_FACCH" ]
+ ST_U_NOINH -> ST_VOICE [ label = "E_VOICE" ]
+ ST_U_NOINH -> ST_U_NOINH [ label = "E_SID_U" ]
+ ST_U_NOINH -> ST_U_NOINH [ label = "E_SID_F" ]
+ ST_U_NOINH -> ST_ONSET_V [ label = "E_ONSET" ]
+ ST_U_NOINH -> ST_SID_U [ label = "E_COMPL" ]
+
+ // SID-FIRST Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it
+ ST_F1_INH_V_REC -> ST_VOICE [ label = "E_COMPL" ]
+ ST_F1_INH_V_REC -> ST_VOICE [ label = "E_VOICE" ]
+
+ // SID-FIRST Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it
+ ST_F1_INH_F_REC -> ST_FACCH [ label = "E_COMPL" ]
+ ST_F1_INH_F_REC -> ST_FACCH [ label = "E_VOICE" ]
+
+ // SID-UPDATE Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it
+ ST_U_INH_V_REC -> ST_VOICE [ label = "E_COMPL" ]
+ ST_U_INH_V_REC -> ST_VOICE [ label = "E_VOICE" ]
+
+ // SID-UPDATE Inhibition recursion in progress: Inhibit itself was already sent, now have to send the voice that caused it
+ ST_U_INH_F_REC -> ST_FACCH [ label = "E_COMPL" ]
+ ST_U_INH_F_REC -> ST_FACCH [ label = "E_VOICE" ]
+
+ // Silence period with periodic comfort noise data updates (can be inhibited)
+ ST_SID_U -> ST_U_INH_F [ label = "E_FACCH" ]
+ ST_SID_U -> ST_VOICE [ label = "E_VOICE" ]
+ ST_SID_U -> ST_U_INH_V [ label = "E_INHIB" ]
+ ST_SID_U -> ST_U_NOINH [ label = "E_SID_U" ]
+ ST_SID_U -> ST_U_NOINH [ label = "E_SID_F" ]
+
+ // ONSET - end of silent period due to incoming SPEECH frame
+ ST_ONSET_V -> ST_ONSET_V_REC [ label = "E_COMPL" ]
+
+ // ONSET - end of silent period due to incoming FACCH frame
+ ST_ONSET_F -> ST_ONSET_F_REC [ label = "E_COMPL" ]
+
+ // ONSET recursion in progress: ONSET itself was already sent, now have to send the data that caused it
+ ST_ONSET_F_REC -> ST_FACCH [ label = "E_COMPL" ]
+
+ // ONSET recursion in progress: ONSET itself was already sent, now have to send the voice that caused it
+ ST_ONSET_V_REC -> ST_VOICE [ label = "E_COMPL" ]
+
+ // FACCH sending state
+ ST_FACCH -> ST_VOICE [ label = "E_VOICE" ]
+ ST_FACCH -> ST_FACCH [ label = "E_FACCH" ]
+ ST_FACCH -> ST_FACCH [ label = "E_SID_U" ]
+ ST_FACCH -> ST_FACCH [ label = "E_SID_F" ]
+ ST_FACCH -> ST_SID_F1 [ label = "E_COMPL" ]
+}
diff --git a/doc/manuals/osmobts-abis-docinfo.xml b/doc/manuals/osmobts-abis-docinfo.xml
new file mode 100644
index 00000000..4e233943
--- /dev/null
+++ b/doc/manuals/osmobts-abis-docinfo.xml
@@ -0,0 +1,83 @@
+<revhistory>
+ <revision>
+ <revnumber>1</revnumber>
+ <date>December 2015</date>
+ <authorinitials>NJH, HW</authorinitials>
+ <revremark>
+ Initial version, reflecting OsmoBTS master branch as on 2015-Dec-7
+ (commit e28a20a2d9d049cd6312e218a7646593bbc43431).
+ </revremark>
+ </revision>
+ <revision>
+ <revnumber>2</revnumber>
+ <date>February 2016</date>
+ <authorinitials>HW</authorinitials>
+ <revremark>
+ Updated version with Message Sequence Chart of OML and RSL bring-up.
+ </revremark>
+ </revision>
+ <revision>
+ <revnumber>2.1</revnumber>
+ <date>February 2016</date>
+ <authorinitials>HW</authorinitials>
+ <revremark>
+ Fix A-bis OML/RSL port number swap in message seqeuence charts.
+ </revremark>
+ </revision>
+ <revision>
+ <revnumber>2.2</revnumber>
+ <date>July 2016</date>
+ <authorinitials>NJH, HW</authorinitials>
+ <revremark>
+ Add description on Dynamic Channel Configuration in OML and activation in RSL.
+ </revremark>
+ </revision>
+
+</revhistory>
+
+<authorgroup>
+ <author>
+ <firstname>Neels</firstname>
+ <surname>Hofmeyr</surname>
+ <email>nhofmeyr@sysmocom.de</email>
+ <authorinitials>NJH</authorinitials>
+ <affiliation>
+ <shortaffil>sysmocom</shortaffil>
+ <orgname>sysmocom - s.f.m.c. GmbH</orgname>
+ <jobtitle>Senior Software Developer</jobtitle>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Harald</firstname>
+ <surname>Welte</surname>
+ <email>hwelte@sysmocom.de</email>
+ <authorinitials>HW</authorinitials>
+ <affiliation>
+ <shortaffil>sysmocom</shortaffil>
+ <orgname>sysmocom - s.f.m.c. GmbH</orgname>
+ <jobtitle>Managing Director</jobtitle>
+ </affiliation>
+ </author>
+</authorgroup>
+
+<copyright>
+ <year>2015-2016</year>
+ <holder>sysmocom - s.f.m.c. GmbH</holder>
+</copyright>
+
+<legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts,
+ and no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ </para>
+ <para>
+ The Asciidoc source code of this manual can be found at
+ <ulink url="http://git.osmocom.org/osmo-gsm-manuals/">
+ http://git.osmocom.org/osmo-gsm-manuals/
+ </ulink>
+ </para>
+</legalnotice>
diff --git a/doc/manuals/osmobts-abis.adoc b/doc/manuals/osmobts-abis.adoc
new file mode 100644
index 00000000..1e02414d
--- /dev/null
+++ b/doc/manuals/osmobts-abis.adoc
@@ -0,0 +1,92 @@
+:gfdl-enabled:
+
+OsmoBTS Abis Protocol Specification
+===================================
+Neels Hofmeyr <nhofmeyr@sysmocom.de>
+
+== Introduction
+
+This document describes the A-bis interface of *OsmoBTS*. Based on 3GPP TS
+12.21 and 08.58, this document indicates which of the 3GPP specified A-bis
+messages and IEs are implemented according to 3GPP specifications, which of
+these are not or not fully implemented, as well as OsmoBTS-specific extensions
+to the A-bis interface not specified by 3GPP.
+
+Extensions to the A-bis interface specific to OsmoBTS are detailed in this
+document. For details on the messages and IEs that comply with above mentioned
+3GPP specifications, please refer to those documents.
+
+.3GPP document versions referred to by this document
+[cols="20%,80%"]
+|===
+|3GPP TS 08.56 | version 8.0.1 Release 1999
+|3GPP TS 08.58 | version 8.6.0 Release 1999
+|3GPP TS 08.60 | version 8.2.1 Release 1999
+|3GPP TS 12.21 | version 8.0.0 Release 1999
+|===
+
+.IETF documents referred to by his document
+[cols="20%,80%"]
+|===
+|IETF RFC 768 | User Datagram Protocol
+|IETF RFC 791 | Internet Protocol
+|IETF RFC 793 | Transmission Control Protocol
+|IETF RFC 1889 | RTP: A Transport Protocol for Real-Time Applications
+|IETF RFC 3551 | RTP Profle for Audio and Video Conferences with Minimal Control
+|IETF RFC 4867 | RTP Payload Format and Files Storage Format for the Adaptive Multi-Rate (AMR) and Adaptive Multi-Rate Wideband (AMR-WB) Audio Codecs
+|IETF RFC 5993 | RTP Payload Format for Global Systems for Mobile Communications Half Rate (GSM-HR)
+|===
+
+== Overview
+
+The OsmoBTS A-bis interface consists of traffic management messages (RSL, Radio
+Signalling Link) and network management messages (OML, Operation & Maintenance
+Link), encapsulated in an IPA multiplex.
+
+OML and RSL each use a separate TCP connection.
+
+.TCP port numbers used by OsmoBTS Abis/IP
+[options="header",width="50%",cols="35%,65%"]
+|===
+|TCP Port Number|Usage
+|3002|A-bis OML (inside IPA multiplex)
+|3003|A-bis RSL (inside IPA multiplex)
+|===
+
+Both TCP connections for OML and RSL are established in the BTS -> BSC
+direction, i.e. the BTS is running as a TCP client, while the BSC is
+running as a TCP server.
+
+The BTS first establishes the TCP connection for OML. Via OML, the BSC
+instructs the BTS to which IP address the RSL connection shall be
+established.
+
+.Overview of A-bis connection establishment
+["mscgen"]
+----
+include::abis/abis-startup.msc[]
+----
+
+=== Identities
+
+The BTS is locally configured (via administrative means, out of band of
+this specification) to have a Unit ID. The Unit ID consists of three
+parts:
+
+* The Site Number
+* The BTS number at the site
+* The TRX number within the BTS
+
+include::abis/ipa.adoc[]
+
+include::abis/oml.adoc[]
+
+include::abis/rsl.adoc[]
+
+include::abis/rtp.adoc[]
+
+include::../common/chapters/port_numbers.adoc[]
+
+include::../common/chapters/glossary.adoc[]
+
+include::../common/chapters/gfdl.adoc[]
diff --git a/doc/manuals/osmobts-usermanual-docinfo.xml b/doc/manuals/osmobts-usermanual-docinfo.xml
new file mode 100644
index 00000000..aa3285f1
--- /dev/null
+++ b/doc/manuals/osmobts-usermanual-docinfo.xml
@@ -0,0 +1,42 @@
+<revhistory>
+ <revision>
+ <revnumber>1</revnumber>
+ <date>January 2016</date>
+ <authorinitials>HW</authorinitials>
+ <revremark>
+ Initial version, reflecting OsmoBTS master branch as on FIXME
+ (commit FIXME).
+ </revremark>
+ </revision>
+</revhistory>
+
+<authorgroup>
+ <author>
+ <firstname>Harald</firstname>
+ <surname>Welte</surname>
+ <email>hwelte@sysmocom.de</email>
+ <authorinitials>HW</authorinitials>
+ <affiliation>
+ <shortaffil>sysmocom</shortaffil>
+ <orgname>sysmocom - s.f.m.c. GmbH</orgname>
+ <jobtitle>Managing Director</jobtitle>
+ </affiliation>
+ </author>
+</authorgroup>
+
+<copyright>
+ <year>2016</year>
+ <holder>sysmocom - s.f.m.c. GmbH</holder>
+</copyright>
+
+<legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with the Invariant Sections being just 'Foreword',
+ 'Acknowledgements' and 'Preface', with no Front-Cover Texts,
+ and no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ </para>
+</legalnotice>
diff --git a/doc/manuals/osmobts-usermanual.adoc b/doc/manuals/osmobts-usermanual.adoc
new file mode 100644
index 00000000..07f88e28
--- /dev/null
+++ b/doc/manuals/osmobts-usermanual.adoc
@@ -0,0 +1,39 @@
+:gfdl-enabled:
+
+OsmoBTS User Manual
+===================
+Harald Welte <hwelte@sysmocom.de>
+
+include::../common/chapters/preface.adoc[]
+
+include::chapters/overview.adoc[]
+
+include::../common/chapters/abis.adoc[]
+
+include::chapters/interfaces.adoc[]
+
+include::chapters/control.adoc[]
+
+include::../common/chapters/vty.adoc[]
+
+include::../common/chapters/logging.adoc[]
+
+include::chapters/configuration.adoc[]
+
+include::chapters/dynamic-timeslots.adoc[]
+
+include::chapters/bts-models.adoc[]
+
+include::chapters/architecture.adoc[]
+
+include::../common/chapters/trx_if.adoc[]
+
+include::../common/chapters/control_if.adoc[]
+
+include::../common/chapters/port_numbers.adoc[]
+
+include::../common/chapters/bibliography.adoc[]
+
+include::../common/chapters/glossary.adoc[]
+
+include::../common/chapters/gfdl.adoc[]
diff --git a/doc/manuals/osmobts-vty-reference.xml b/doc/manuals/osmobts-vty-reference.xml
new file mode 100644
index 00000000..f4048434
--- /dev/null
+++ b/doc/manuals/osmobts-vty-reference.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ex:ts=2:sw=42sts=2:et
+ -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+-->
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML 5.0//EN"
+"http://docbook.org/xml/5.0/dtd/docbook.dtd" [
+<!ENTITY chapter-vty SYSTEM "../common/chapters/vty.xml" >
+<!ENTITY sections-vty SYSTEM "generated/docbook_vty.xml" >
+]>
+
+<book>
+ <info>
+ <revhistory>
+ <revision>
+ <revnumber>v1</revnumber>
+ <date>13th October 2016</date>
+ <authorinitials>hw</authorinitials>
+ <revremark>Initial</revremark>
+ </revision>
+ </revhistory>
+
+ <title>OsmoBTS VTY Reference</title>
+
+ <copyright>
+ <year>2016</year>
+ </copyright>
+
+ <legalnotice>
+ <para>This work is copyright by <orgname>sysmocom - s.f.m.c. GmbH</orgname>. All rights reserved.
+ </para>
+ </legalnotice>
+ </info>
+
+ <!-- Main chapters-->
+ &chapter-vty;
+</book>
+
diff --git a/doc/manuals/rtp-amr-docinfo.xml b/doc/manuals/rtp-amr-docinfo.xml
new file mode 100644
index 00000000..3f4de8d9
--- /dev/null
+++ b/doc/manuals/rtp-amr-docinfo.xml
@@ -0,0 +1,73 @@
+<revhistory>
+ <revision>
+ <revnumber>1</revnumber>
+ <date>October 2016</date>
+ <authorinitials>HW</authorinitials>
+ <revremark>
+ Initial version
+ </revremark>
+ </revision>
+ <revision>
+ <revnumber>2</revnumber>
+ <date>November 2016</date>
+ <authorinitials>MS</authorinitials>
+ <revremark>
+ FSM added
+ </revremark>
+ </revision>
+ <revision>
+ <revnumber>3</revnumber>
+ <date>July 2017</date>
+ <authorinitials>PE</authorinitials>
+ <revremark>
+ Add section and update sequence charts to describe requirement to receive all PH-DATA.ind events
+ </revremark>
+ </revision>
+</revhistory>
+
+<authorgroup>
+ <author>
+ <firstname>Harald</firstname>
+ <surname>Welte</surname>
+ <email>hwelte@sysmocom.de</email>
+ <authorinitials>HW</authorinitials>
+ <affiliation>
+ <shortaffil>sysmocom</shortaffil>
+ <orgname>sysmocom - s.f.m.c. GmbH</orgname>
+ <jobtitle>Managing Director</jobtitle>
+ </affiliation>
+ </author>
+ <author>
+ <firstname>Max</firstname>
+ <surname>Suraev</surname>
+ <email>msuraev@sysmocom.de</email>
+ <authorinitials>MS</authorinitials>
+ <affiliation>
+ <shortaffil>sysmocom</shortaffil>
+ <orgname>sysmocom - s.f.m.c. GmbH</orgname>
+ <jobtitle>Software Developer</jobtitle>
+ </affiliation>
+ </author>
+</authorgroup>
+
+<copyright>
+ <year>2016</year>
+ <holder>sysmocom - s.f.m.c. GmbH</holder>
+</copyright>
+
+<legalnotice>
+ <para>
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, no Front-Cover Texts,
+ and no Back-Cover Texts. A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ </para>
+ <para>
+ The Asciidoc source code of this manual can be found at
+ <ulink url="http://git.osmocom.org/osmo-gsm-manuals/">
+ http://git.osmocom.org/osmo-gsm-manuals/
+ </ulink>
+ </para>
+</legalnotice>
diff --git a/doc/manuals/rtp-amr.adoc b/doc/manuals/rtp-amr.adoc
new file mode 100644
index 00000000..4da2e1b3
--- /dev/null
+++ b/doc/manuals/rtp-amr.adoc
@@ -0,0 +1,1362 @@
+= AMR-RTP in Combination with DTX
+
+The purpose of this document is to describe the sometimes quite
+intricate interactions between a MS, the BTS-PHY and the BTS software
+in case of AMR (Adaptive Multi Rate) codec and DTX (Discontinuous
+Transmission).
+
+It is written with the OsmoBTS implementation and the Nutaq GSM PHY
+API in mind, but should more or less be applicable to any GSM BTS
+PHY or any BTS software implementation, assuming it uses RTP on the
+back-haul towards the MGW.
+
+== Full-Rate (TCH/AFS)
+
+=== TCH/AFS Uplink (MS to Network)
+
+==== TCH/AFS Uplink: Initial Assumptions
+
+When a call is established, the BTS expects PH-DATA.ind (TCH) events to be
+triggered by BTS-PHY at regular intervals and none of them being lost, even if
+the MS is not transmitting at that time due to DTX. This requirement is
+important as upper layers rely on this timing to update the RTP source clock at
+a correct pace. Given an event from BTS-PHY is lost, the RTP source clock will
+drift and this may be seen as steady increase of delay over time from the
+receiver point of view.
+
+In the case of Nutaq GSM PHY and API, option fBFILevel is set to a ridiculously
+low value -200 to ensure all indications are notified to upper layers, even if
+no meaningful payload is available at that time. In this case, an empty payload
+is delivered from PHY-BTS to BTS, which updates the clock without sending any
+RTP packet.
+
+==== TCH/AFS Uplink: During Talk-Spurt
+
+During a talk-spurt, the system behaves identical to a system without
+DTX enabled: Every four radio bursts, the BTS-PHY has one AMR frame
+ready and hands it up to the BTS process, which creates an RTP AMR
+frame from it and sends that to the MGW.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Regular AMR Speech (has been ongoing for some time)"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N-1 + sub-block 1 of speech frame N)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N-1 + sub-block 2 of speech frame N)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N-1 + sub-block 3 of speech frame N)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N-1 + sub-block 4 of speech frame N)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N-1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 3 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 4 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+}
+----
+
+==== TCH/AFS Uplink: End of Voice; Start of Silence
+
+When the voice encoder in the MS detects no voice activity anymore, it
+signals towards the MS-PHY that SID_FIRST shall be transmitted.
+
+The BTS-PHY reports the following primitives to the BTS after all four
+related bursts have been received:
+
+The BTS sends an RTP frame with AMR Frame Type SID, in which the STI
+is set to indicate a SID_FIRST message.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Last AMR Speech (end of talk-spurt) and SID"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N, sub-block 1 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N, sub-block 2 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N, sub-block 3 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N, sub-block 4 of SID_FIRST)", id="ULSF2"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms -x phy [label="Suppressed L1 burst"];
+ ms -x phy [label="Suppressed L1 burst"];
+ ms -x phy [label="Suppressed L1 burst"];
+ ms -x phy [label="Suppressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_FIRST)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)", id="ULSU2"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+}
+----
+
+ULSF2:: As per 3GPP TS 05.03 section 3.9.2.4 The last 4 bursts shall not be transmitted unless
+the SID_FIRST frame is immediately followed by a speech frame. It has been observed that some phone
+does not transmit the last 4 bursts even if it is not followed by a speech frame.
+
+ULSU2:: There must be exactly two supressed voice frames between the
+SID_FIRST and the SID_UPDATE, i.e. there's 60ms between SID_FIRST and
+SID_UPDATE.
+
+==== TCH/AFS Uplink: During Silence
+
+While the period of silence is ongoing, the MS pauses all
+transmissions, except the periodic scheduling of SID_UPDATE every 8
+voice frames (160ms).
+
+NOTE:: Silence can also be interrupted at any time by ONSET, see
+<<afs-ul-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Every 8 voice frames (160ms)", id="8VF"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+}
+----
+
+8VF:: This happens every 8 *voice frames* (160ms), not every 8 GSM
+TDMA frames!
+
+[[afs-ul-onset]]
+==== TCH/AFS Uplink: End of Silence; Start of Voice
+
+Once the voice encoder in the MS detects voice activity again, it
+asks its transmitter to perform transmission of SID_ONSET, which is a
+special frame whose information is encoded only in sub-blocks 3+4, and
+sub-blocks 1+2 are discarded before transmission.
+
+A set of four radio bursts is sent, containing
+
+* the only four transmitted sub-blocks of the SID_ONSET frame
+* all four sub-blocks of the first voice codec frame
+* the first two blocks of the second voice codec frame
+
+The BTS-PHY informs the BTS using two primitives:
+
+* PH-DATA.ind GsmL1_TchPlType_Amr_Onset indicates the presence of
+ SID_ONSET, including the Channel Mode Indication (irrespective of
+ CMI Phase)
+* PH-DATA.ind GsmL1_TchPlType_Amr indicates the first voice frame
+
+The BTS transmits an RTP frame with AMR payload of the corresponding
+speech frame type, and sets the RTP MARKER bit to indicate the ONSET
+condition.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Once voice is active again"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)", id="ULSO2"];
+ ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N)"];
+ ms => phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of speech frame N)"];
+ ms => phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of speech frame N)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 3 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 4 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_Onset"];
+ bts => bts [label="lchan_set_marker() and store CMI"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N+1 + sub-block 3 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N+1 + sub-block 4 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N+1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ ...;
+}
+----
+
+ULSO2:: sub-blocks 1..4 of SID_ONSET are never transmitted as all
+information is contained in blocks 5..8.
+
+==== TCH/AFS Uplink: Speech Frame Following a SID_FIRST frame
+
+The four last bursts of a SID_FIRST frame can be replaced by an ONSET frame in order to quickly resume speech.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Speech Frame Following a SID_FIRST"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N, sub-block 1 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N, sub-block 2 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N, sub-block 3 of SID_FIRST)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N, sub-block 4 of SID_FIRST)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N+1)"];
+ ms => phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of speech frame N+1)"];
+ ms => phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_FIRST)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ ms => phy [label="L1 burst (sub-block 5 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 6 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 7 of speech frame N+1 + sub-block 3 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 8 of speech frame N+1 + sub-block 4 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_Onset"];
+ bts => bts [label="lchan_set_marker() and store CMI"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N+1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ ...;
+}
+----
+
+==== TCH/AFS Uplink: FACCH/F Frame During DTX Operation
+
+As mentioned in section A.5.1.2.1 of 3GPP TS 26.093 :
+
+* If the frame preceding the FACCH frame is not of TX_TYPE='SPEECH_GOOD', then an ONSET frame shall be signalled to the CHE, followed by the FACCH frame(s).
+* If the frame following the FACCH frame is not of TX_TYPE='SPEECH_GOOD', then a SID_FIRST shall be signalled to the CHE.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="FACCH/F Frame During DTX"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH frame)"];
+ ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH frame)"];
+ ms => phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of FACCH frame)"];
+ ms => phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of FACCH frame)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 5 of FACCH frame + sub-block 1 of SID First frame)"];
+ ms => phy [label="L1 burst (sub-block 6 of FACCH frame + sub-block 2 of SID First frame)"];
+ ms => phy [label="L1 burst (sub-block 7 of FACCH frame + sub-block 3 of SID First frame)"];
+ ms => phy [label="L1 burst (sub-block 8 of FACCH frame + sub-block 4 of SID First frame)", id="Note"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_Onset"];
+ bts => bts [label="lchan_set_marker() and store CMI"];
+ phy => bts [label="PH-DATA.ind FACCH/F"];
+ bts => mgw [label="FACCH/F"];
+
+ ms -x phy [label="Supressed L1 burst", id="ULSF2"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_FIRST)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+ ...;
+}
+----
+
+ULSF2:: The sub-blocks 5-8 of SID_FIRST are not transmitted, as all
+information bits are contained in sub-blocks 1-4 only
+
+Note:: It has been observed with some phones that the SID_FIRST is not sent following the FACCH/F
+frame. If this case occures the No Data Frame and SID_UPDATE order resumes.
+
+=== TCH/AFS Downlink (Network to MS)
+
+[[afs-dl-talk]]
+==== TCH/AFS Downlink: During Talk-Spurt
+
+During a talk-spurt, the system behaves identical to a system without
+DTX enabled: an RTP frame arrives every 20ms.
+
+The PHY sends a PH-RTS.ind in similar intervals, to which the BTS
+responds with a PH-DATA.req containing GsmL1_TchPlType_Amr.
+
+The BTS-PHY then encodes and interleaves the codec frame into eight
+sub-blocks. Due to the interleaving, one new PH-RTS.ind is issued
+every four bursts.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Regular AMR Speech (has been ongoing for some time)"];
+
+ mgw => bts [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N-1 + sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N-1 + sub-block 2 of speech frame N)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N-1 + sub-block 3 of speech frame N)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N-1 + sub-block 4 of speech frame N)"];
+ mgw => bts [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 3 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AFS Downlink: End of Voice; Start of Silence
+
+When the BTS receives the first RTP frame with Frame Type SID, it will
+generate a SID_FIRST AMR frame. The AMR frame is interleaved in a way
+that all information is contained in the first four sub-blocks, with
+the latter four sub-blocks being dropped and not transmitted.
+
+Three codec frames (60ms) later, the BTS needs to transmit a
+SID_UPDATE AMR frame, which should consist of comfort noise parameters
+received in either the first AMR SID frame, or a subsequent AMR SID
+frame received meanwhile.
+
+In between SID_FIRST and SID_UPDATE, and after the SID_UPDATE, the BTS
+sends PH-EMPTY-FRAME.req to all PH-RTS.ind, causing the BTS-PHY to
+cease transmission in those periods.
+
+NOTE:: At any time, the BTS can end the silence period by issuing
+ONSET (in case of a new downlink talk-spurt or a FACCH downlink
+frame). See <<afs-dl-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Last AMR Speech (end of talk-spurt) and SID First"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_FIRST)"];
+ bts => bts [label="Store SID frame in case it contains comfort noise parameters"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N-1 + sub-block 1 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N-1 + sub-block 2 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N-1 + sub-block 3 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N-1 + sub-block 4 of SID_FIRST)", id="DLSF2"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ bts => bts [label="Store SID frame in case it contains comfort noise parameters"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_UPDATE)", id="DLSU2"];
+ ms <= phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+}
+----
+
+DLSF2:: sub-frames 5..8 of SID_FIRST are not transmitted, as all
+information is contained in sub-frames 1..4
+
+DLSU2:: The SID_UPDATE must be sent exactly three voice frames (60ms)
+after the SID_FIRST, resulting in two suppressed voice frame periods of
+empty bursts in-between.
+
+==== TCH/AFS Downlink: During Silence
+
+During Silence periods, the BTS may at any time receive RTP AMR SID
+frames, and keep a copy of the last received frame around.
+
+Every eight voice frames (160ms), the BTS shall respond to the
+PH-RTS.ind with a PH-DATA.req containing a GsmL1_TchPlType_Amr with
+SID_UPDATE frame.
+
+At all other times, the BTS sends PH-EMPTY-FRAME.req to any received
+PH-RTS.ind, causing the BTS-PHY to cease transmission in those
+periods.
+
+NOTE:: At any time, the BTS can end the silence period by issuing
+ONSET (in case of a new downlink talk-spurt or a FACCH downlink
+frame). See <<afs-dl-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Every 8 voice frames (160ms)", id="8VF"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ bts => bts [label="Store SID frame in case it contains comfort noise parameters"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+}
+----
+
+8VF:: This happens every 8 *voice frames* (160ms), not every 8 GSM
+TDMA frames!
+
+[[afs-dl-onset]]
+==== TCH/AFS Downlink: End of Silence; Start of Voice
+
+Once the BTS receives a non-SID AMR RTP frame (which should also have
+the MARKER bit set to 1, but let's not take that for granted), the
+contained AMR voice data is passed to the BTS-PHY in the next
+PH-DATA.req (GsmL1_TchPlType_Amr_Onset).
+
+From that point onwards, regular transmission resumes, see
+<<afs-dl-talk>>
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Once voice is active again"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of speech frame N)"];
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AFS Downlink: Inhibiting a SID_FIRST frame
+
+Here is the procedure to inhibit a SID_FIRST frame in order to quickly resume speech.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Inhibiting a SID_FIRST frame"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_FIRST)"];
+ bts => bts [label="Store SID frame in case it contains comfort noise parameters"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N-1 + sub-block 1 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N-1 + sub-block 2 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N-1 + sub-block 3 of SID_FIRST)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N-1 + sub-block 4 of SID_FIRST)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of speech frame N)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 5 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 6 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 7 of speech frame N + sub-block 2 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 8 of speech frame N + sub-block 2 of speech frame N+1)"];
+ }
+----
+
+==== TCH/AFS Downlink: FACCH/F During DTX Operation
+
+The following procedure must be observed if a FACCH/F frame must be transmitted during DTX operation.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="FACCH/F Frame During DTX"];
+
+ bts <= mgw [label="FACCH/F"];
+ phy => bts [label="PH-RTS.ind (FACCH/F)"];
+ phy => bts [label="PH-RTS.ind (TCH/F)"];
+ phy <= bts [label="PH-DATA.req (FACCH/F)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset(TCH/F)", id="NOTE"];
+ ms <= phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH/F)"];
+ ms <= phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH/F)"];
+ ms <= phy [label="L1 burst (block 3 of SID_ONSET + sub-block 3 of FACCH/F)"];
+ ms <= phy [label="L1 burst (block 4 of SID_ONSET + sub-block 4 of FACCH/F)"];
+
+ phy => bts [label="PH-RTS.ind (FACCH)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req (FACCH/F)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_FIRST)"];
+ ms x- phy [label="L1 burst (sub-block 5 of FACCH/F + sub-block 1 of SID_FIRST)"];
+ ms x- phy [label="L1 burst (sub-block 6 of FACCH/F + sub-block 2 of SID_FIRST)"];
+ ms x- phy [label="L1 burst (sub-block 7 of FACCH/F + sub-block 3 of SID_FIRST)"];
+ ms x- phy [label="L1 burst (sub-block 8 of FACCH/F + sub-block 4 of SID_FIRST)"];
+
+ phy => bts [label="PH-RTS.ind (FACCH)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req (FACCH/F)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req (TCH/F)"];
+ ms x- phy [label="Supressed burst"];
+ ms x- phy [label="Supressed burst"];
+ ms x- phy [label="Supressed burst"];
+ ms x- phy [label="Supressed burst"];
+}
+----
+
+NOTE:: The ONSET and the FACCH/F PH-DATA requests must both be sent to the PHY.
+
+== Half-Rate (TCH/AHS)
+
+=== TCH/AHS Uplink (MS to Network)
+
+==== TCH/AHS Uplink: During Talk-Spurt
+
+During a talk-spurt, the system behaves identical to a system without
+DTX enabled: Every two radio bursts, the BTS-PHY has one AMR frame
+ready and hands it up to the BTS process, which creates an RTP AMR
+frame from it and sends that to the MGW.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Regular AMR Speech (has been ongoing for some time)"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N-1 + sub-block 1 of speech frame N)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N-1 + sub-block 2 of speech frame N)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N-2)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N-1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+}
+----
+
+==== TCH AHS Uplink: End of Voice; Start of Silence
+
+When the voice encoder in the MS detects no voice activity anymore, it
+signals towards the MS-PHY that SID_FIRST_P1 and SID_FIRST_P2 shall be
+transmitted.
+
+The BTS-PHY reports the following primitives to the BTS after all four
+related bursts have been received:
+
+* PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP1
+* PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP2
+
+The BTS sends an RTP frame with AMR Frame Type SID, in which the STI
+is set to indicate a SID_FIRST message.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Last AMR Speech (end of talk-spurt) and SID P1/P2"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N, sub-block 1 of SID_FIRST_P1)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N, sub-block 2 of SID_FIRST_P1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N-1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms => phy [label="L1 burst (sub-block 3 of SID_FIRST_P1, sub-block 1 of SID_FIRST_P2)"];
+ ms => phy [label="L1 burst (sub-block 4 of SID_FIRST_P1, sub-block 2 of SID_FIRST_P2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP1", id="ULSF1"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)", id="ULSU1"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP2", id="NOTE"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+}
+----
+
+ULSF1:: Only SID_FIRST_P1 contains information so it must be the only one transmitted over RTP.
+
+NOTE:: It has been observed that not all phones transmit SID_FIRST_P2 so the PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP2 is not guaranteed to be sent to the BTS.
+
+ULSU1:: There must be exactly two supressed voice frames between the
+SID_FIRST and the SID_UPDATE, i.e. there's 60ms between SID_FIRST and
+SID_UPDATE.
+
+==== TCH/AFS Uplink: During Silence
+
+While the period of silence is ongoing, the MS pauses all
+transmissions, except the periodic scheduling of SID_UPDATE every
+8 voice frames (160ms).
+
+NOTE:: Silence can also be interrupted at any time by ONSET, see
+<<ahs-ul-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Every 8 voice frames (160ms)", id="8VF"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+ ms => phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+}
+----
+
+8VF:: This happens every 8 *voice frames* (160ms), not every 8 GSM
+TDMA frames!
+
+[[ahs-ul-onset]]
+==== TCH/AHS Uplink: End of Silence; Start of Voice
+
+Once the voice encoder in the MS detects voice activity again, it
+asks its transmitter to perform transmission of SID_ONSET, which is a
+special frame which has information encoded only in sub-blocks 3+4, and
+sub-blocks 1+2 are discarded before transmission.
+
+A set of four radio bursts is sent, containing
+
+* the only two transmitted sub-blocks of the SID_ONSET frame
+* all four sub-blocks of the first voice codec frame
+* the first two blocks of the second voice codec frame
+
+The BTS-PHY informs the BTS using two primitives:
+
+* PH-DATA.ind GsmL1_TchPlType_Amr_Onset indicates the presence of
+ SID_ONSET, including the Channel Mode Indication (irrespective of
+ CMI Phase)
+* PH-DATA.ind GsmL1_TchPlType_Amr indicates the first voice frame
+
+The BTS transmits a RTP frame with AMR payload of the corresponding
+speech frame type, and sets the RTP MARKER bit to indicate the ONSET
+condition.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Once voice is active again"];
+
+ ms -x phy [label="Suppressed L1 burst"];
+ ms -x phy [label="Suppressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of speech frame N)"];
+ ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of speech frame N)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_Onset"];
+ bts => bts [label="lchan_set_marker() and store CMI"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ ...;
+}
+----
+
+==== TCH/AHS Uplink: Inhibited SID_FIRST
+
+In case voice activity is detected again while the SID_FIRST_P1
+transmission is ongoing or completed, but the SID_FIRST_P2 has not
+been transmitted yet, SID_FIRST can be inhibited by means of a
+SID_FIRST_INH frame. This allows the first voice frame to be
+transmitted with minimal delay, compared to first completing
+the regular SID_FIRTS_P2 and SID_ONSET procedure.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ms .. mgw [label="End of talk-spurt with inhibited SID_FIRST"];
+
+ ms => phy [label="L1 burst (sub-block 3 of last speech frame N + sub-block 1 of SID_FIRST_P1)"];
+ ms => phy [label="L1 burst (sub-block 4 of last speech frame N + sub-block 2 of SID_FIRST_P1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N-1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms => phy [label="L1 burst (block 1 of SID_FIRST_INH and sub-block 1 of speech frame N+1", id="SFI1"];
+ ms => phy [label="L1 burst (block 2 of SID_FIRST_INH and sub-block 2 of speech frame N+1"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1)"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N+2 + sub-block 1 of speech frame N+3)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N+2 + sub-block 2 of speech frame N+3)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_SidInh", id="SFI2"];
+ bts => bts [label="store CMI from SID_FIRST_INH"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N+1)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+}
+----
+
+==== TCH/AHS Uplink: Inhibited SID_UPDATE
+
+In case voice activity is detected again while the SID_UPDATE
+transmission of the first two sub-blocks is ongoing or completed, but
+the second two sub-blocks have not been transmitted yet, SID_UPDATE can
+be inhibited by means of a SID_UPDATE_INH frame. This allows the
+first voice frame to be transmitted with minimal delay, compared to
+first completing the regular SID_UPDATE and SID_ONSET procedure.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ ms .. mgw [label="Inhibited SID Update (during silence period)"];
+
+ ms => phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms => phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (block 1 of SID_UPD_INH + sub-block 1 of speech frame N)", id="SFU1"];
+ ms => phy [label="L1 burst (block 2 of SID_UPD_INH + sub-block 2 of speech frame N)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3 of speech frame N+1 + sub-block 1 of speech frame N+2)"];
+ ms => phy [label="L1 burst (sub-block 4 of speech frame N+1 + sub-block 2 of speech frame N+2)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_SidUpdateInH", id="SFU2"];
+ bts => bts [label="lchan_set_marker() and store CMI from SID_UPD_INH"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr (N)"];
+ bts => mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+}
+----
+
+==== TCH/AHS Uplink: FACCH/H During DTX operation
+
+The following procedure must be observed if a FACCH/H frame must be transmitted during DTX operation.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ ms .. mgw [label="FACCH/H during DTX operation"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (block 1 of SID_ONSET + sub-block 1 of FACCH/H)"];
+ ms => phy [label="L1 burst (block 2 of SID_ONSET + sub-block 2 of FACCH/H)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 3+4 of FACCH/H)"];
+ ms => phy [label="L1 burst (sub-block 5+6 of FACCH/H)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms => phy [label="L1 burst (sub-block 7 of FACCH/H + sub-block 1 of SID_FIRST_P1)"];
+ ms => phy [label="L1 burst (sub-block 8 of FACCH/H + sub-block 2 of SID_FIRST_P1)"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_Onset"];
+ bts => bts [label="lchan_set_marker() and store CMI"];
+ phy => bts [label="PH-DATA.ind FACCH/H"];
+ bts => mgw [label="FACCH/H"];
+
+ ms => phy [label="L1 burst (sub-block 3 of SID_FIRST_P1 + block 1 of SID_FIRST_P2)"];
+ ms => phy [label="L1 burst (sub-block 4 of SID_FIRST_P1 + block 2 of SID_FIRST_P2)"];
+ phy => bts [label="PH-DATA.ind with empty payload"];
+ bts -x mgw [label="Suppressed RTP frame"];
+
+ ms -x phy [label="Supressed L1 burst"];
+ ms -x phy [label="Supressed L1 burst"];
+ phy => bts [label="PH-DATA.ind GsmL1_TchPlType_Amr_SidFirstP1"];
+ bts => mgw [label="RTP (AMR FT=SID,Q=1)"];
+}
+----
+
+=== TCH/AHS Downlink (Network to MS)
+
+[[ahs-dl-talk]]
+==== TCH/AHS Downlink: During Talk-Spurt
+
+During a talk-spurt, the system behaves identically to a system without
+DTX enabled: an RTP frame arrives every 20ms.
+
+The PHY sends a PH-RTS.ind in similar intervals, to which the BTS
+responds with a PH-DATA.req containing GsmL1_TchPlType_Amr.
+
+The BTS-PHY then encodes and interleaves the codec frame into four
+sub-blocks. Due to the interleaving, one new PH-RTS.ind is issued
+every two bursts.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Regular AMR Speech (has been ongoing for some time)"];
+
+ mgw => bts [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N-1 + sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N-1 + sub-block 2 of speech frame N)"];
+ mgw => bts [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AHS Downlink: End of Voice; Start of Silence
+
+
+When the BTS receives the first RTP frame with Frame Type SID, it will
+first issue a GsmL1_TchPlType_Amr_SidFirstP1 primitive towards the
+BTS-PHY, followed by a GsmL1_TchPlType_Amr_SidFirstP2 primitive.
+
+The SID_FIRST_P2 is interleaved in a way that all information is
+contained in the first two sub-blocks, with the latter two
+sub-blocks being dropped and not transmitted.
+
+Three codec frames (60ms) later, the BTS needs to transmit a
+SID_UPDATE AMR frame, which should consist of comfort noise
+parameters received in either the first RTP AMR SID frame, or a
+subsequent RTP AMR SID frame received meanwhile.
+
+In between SID_FIRST_P2 and SID_UPDATE, and after the SID_UPDATE, the
+BTS sends PH-EMPTY-FRAME.req to all PH-RTS.ind, causing the BTS-PHY to
+cease transmission in those periods.
+
+NOTE:: At any time, the BTS can end the silence period by issuing
+ONSET (in case of a new downlink talk-spurt or a FACCH
+downlink frame). See Section <<ahs-dl-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Last AMR Speech (end of talk-spurt) and SID P1/P2"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstP1"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N-1 + sub-block 1 of SID_FIRST_P1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N-1 + sub-block 2 of SID_FIRST_P1)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstP2"];
+ ms <= phy [label="L1 burst (sub-block 3 of SID_FIRST_P1, sub-block 1 of SID_FIRST_P2)"];
+ ms <= phy [label="L1 burst (sub-block 4 of SID_FIRST_P1, sub-block 2 of SID_FIRST_P2)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_UPDATE)", id="ULSU2"];
+ ms <= phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms <= phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms x- phy [label="Suppressed burst"];
+ ms x- phy [label="Suppressed burst"];
+}
+----
+
+ULSU2:: The SID_UPDATE must be sent exactly three voice frames (60ms)
+after the SID_FIRST, resulting in two suppressed voice frame periods of
+empty bursts in between.
+
+==== TCH/AHS Downlink: During Silence
+
+During Silence periods, the BTS may at any time receive RTP AMR SID
+frames and keep a copy of the last received frame around.
+
+Every eight voice frames (160ms), the BTS shall respond to the
+PH-RTS.ind with a PH-DATA.req containing a GsmL1_TchPlType_Amr with
+SID_UPDATE frame.
+
+At all other times, the BTS sends PH-EMPTY-FRAME.req to any received
+PH-RTS.ind, causing the BTS-PHY to cease transmission in those
+periods.
+
+NOTE:: At any time, the BTS can end the silence period by issuing
+ONSET (in case of a new downlink talk-spurt or a FACCH downlink
+frame). See Section <<ahs-dl-onset>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Every 8 voice frames (160ms)", id="8VF"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms <= phy [label="L1 burst (sub-block 5+6 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 7+8 of SID_UPDATE)"];
+}
+----
+
+8VF:: This happens every 8 *voice frames* (160ms), not every 8 GSM
+TDMA frames!
+
+[[ahs-dl-onset]]
+==== TCH/AHS Downlink: End of Silence; Start of Voice
+
+Once the BTS receives a non-SID AMR RTP frame (which should also have
+the MARKER bit set to 1, but let’s not take that for granted), the
+contained AMR voice data is passed to the BTS-PHY in the next
+PH-DATA.req (GsmL1_TchPlType_Amr_Onset).
+
+From that point onwards, regular transmission resumes, see
+<<ahs-dl-talk>>.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Once voice is active again"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (sub-block 3 of SID_ONSET + sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (sub-block 4 of SID_ONSET + sub-block 2 of speech frame N)"];
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AHS Downlink: Inhibited SID_FIRST_P1
+
+The following procedure must be observed in case of a SID_FIRST must be inhibited.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Inhibited SID_FIRST_P1"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstP1"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N-1 + sub-block 1 of SID_FIRST_P1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N-1 + sub-block 2 of SID_FIRST_P1)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstInh"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (block 1 of SID_FIRST_INH, sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 2 of SID_FIRST_INH, sub-block 2 of speech frame N)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AHS Downlink: Inhibited SID_UPDATE
+
+The following procedure must be observed in case of a SID_UPDATE must be inhibited.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="Inhibited SID_UPDATE"];
+
+ bts <= mgw [label="RTP (AMR FT=SID,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ bts => phy [label="PH-DATA.req GsmL1_TchPlType_Amr (SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 1+2 of SID_UPDATE)"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of SID_UPDATE)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1) MARKER=1"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidUpdateInh"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N)"];
+ ms <= phy [label="L1 burst (block 1 of SID_UPDATE_INH, sub-block 1 of speech frame N)"];
+ ms <= phy [label="L1 burst (block 2 of SID_UPDATE_INH, sub-block 2 of speech frame N)"];
+
+ bts <= mgw [label="RTP (AMR FT=0..7,Q=1)"];
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr (N+1)"];
+ ms <= phy [label="L1 burst (sub-block 3 of speech frame N + sub-block 1 of speech frame N+1)"];
+ ms <= phy [label="L1 burst (sub-block 4 of speech frame N + sub-block 2 of speech frame N+1)"];
+}
+----
+
+==== TCH/AHS Downlink: FACCH/H During DTX Operation
+
+The following procedure must be observed in case of a FACCH/H frame must be inserted during DTX operation.
+
+["mscgen"]
+----
+msc {
+ hscale = 2;
+ ms [label="MS"], phy [label="BTS-PHY"], bts [label="BTS"], mgw [label="MGW"];
+
+ ...;
+ --- [label="FACCH/H During DTX Operation"];
+
+ bts <= mgw [label="FACCH/H"];
+ phy => bts [label="PH-RTS.ind (FACCH/H)"];
+ phy => bts [label="PH-RTS.ind (TCH/H)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_Onset"];
+ phy <= bts [label="PH-DATA.req FACCH/H"];
+ ms <= phy [label="L1 burst (block 1 of SID_ONSET, sub-block 1 of FACCH/H frame)"];
+ ms <= phy [label="L1 burst (block 2 of SID_ONSET, sub-block 2 of FACCH/H frame)"];
+
+ phy => bts [label="PH-RTS.ind (TCH/H)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req"];
+ ms <= phy [label="L1 burst (sub-block 3+4 of FACCH/H frame)"];
+ ms <= phy [label="L1 burst (sub-block 5+6 of FACCH/H frame)"];
+
+ phy => bts [label="PH-RTS.ind (FACCH/H)"];
+ phy => bts [label="PH-RTS.ind (TCH/H)"];
+ phy <= bts [label="PH-EMPTY-FRAME.req (FACCH/H)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstP1"];
+ ms <= phy [label="L1 burst (sub-block 7 of FACCH/H frame + sub-block 1 of SID_FIRST_P1)"];
+ ms <= phy [label="L1 burst (sub-block 8 of FACCH/H frame + sub-block 2 of SID_FIRST_P1)"];
+
+ phy => bts [label="PH-RTS.ind (TCH)"];
+ phy <= bts [label="PH-DATA.req GsmL1_TchPlType_Amr_SidFirstP2"];
+ ms <= phy [label="L1 burst (sub-block 3 of SID_FIRST_P1, sub-block 1 of SID_FIRST_P2)"];
+ ms <= phy [label="L1 burst (sub-block 4 of SID_FIRST_P1, sub-block 2 of SID_FIRST_P2)"];
+}
+----
+
+== Implementation details
+
+There is FSM implementing all the necessary states and transitions for DTX DL.
+
+[[dtx_dl_fsm]]
+[graphviz]
+----
+include::dtx.dot[]
+----
+
+The idea is that each state corresponds to the particular message type which have to be send to L1 next while state transition happens on incoming events like FACCH or Voice frames. There are 3 different classes of of events driving this FSM:
+
+* Voice frame types: E_VOICE, E_SID_U, E_SID_F
+* Incoming FACCH: E_FACCH
+* Internal: E_ONSET, E_INHIB, E_COMPL
+
+They represent different types of incoming RTP frames (Voice, SID UPDATE and SID FIRST correspondingly), incoming FACCH events or important events internal to DTX operations. The latter are Onset (interruption of silence period), Inhibition (of currently transmitted SID FIRST or UPDATE) and Completion (of silence initiation).
+
+The double-circled states are "stationary" meaning that FSM can stay for longer periods in them. Other states are "transient" - the FSM have to switch away during next step. In practice this is implemented using E_COMPL signal which is issued in corresponding RTS handler or internal function (in case of SID First P1 -> P2 transition).
+
+The FSM states are grouped as follows:
+
+* ST_VOICE: talkspurt, normal voice transmission
+* ST_FACCH: transmission of higher-priority FACCH frame, interrupting current DTX state
+* ST_ONSET*: handling of Onset event (interruption of silence period)
+* ST_SID_F*: silence initiation
+* ST_*_REC: sending of 2nd event for L1 during the same FN
+* ST_*_INH: handling of Inhibition event (interruption of transmission of previous event)
+
+The latter are specific to AMR HR where transmission of particular message by L1 takes longer so it can be aborted due to another incoming event. Note that for AMR FR only subset of this FSM is active (ST_SID_F2 and *INH states are never reached). This is implemented by signal emitting functions.
+
+Note that the FSM states describe only the situation when we got to send something to L1, the transmission of Empty frames suppressing the actual radio transmission is done by other code.
diff --git a/doc/manuals/vty/bts_vty_additions.xml b/doc/manuals/vty/bts_vty_additions.xml
new file mode 100644
index 00000000..519c4b48
--- /dev/null
+++ b/doc/manuals/vty/bts_vty_additions.xml
@@ -0,0 +1 @@
+<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'/>
diff --git a/doc/manuals/vty/bts_vty_reference.xml b/doc/manuals/vty/bts_vty_reference.xml
new file mode 100644
index 00000000..b50ac1ba
--- /dev/null
+++ b/doc/manuals/vty/bts_vty_reference.xml
@@ -0,0 +1,1633 @@
+<vtydoc xmlns='urn:osmocom:xml:libosmocore:vty:doc:1.0'>
+ <node id='0'>
+ </node>
+ <node id='1'>
+ <command id='show version'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='version' doc='Displays program version' />
+ </params>
+ </command>
+ <command id='show online-help'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='online-help' doc='Online help' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='enable'>
+ <params>
+ <param name='enable' doc='Turn on privileged mode command' />
+ </params>
+ </command>
+ <command id='terminal length &lt;0-512&gt;'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='length' doc='Set number of lines on a screen' />
+ <param name='&lt;0-512&gt;' doc='Number of lines on screen (0 for no pausing)' />
+ </params>
+ </command>
+ <command id='terminal no length'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='length' doc='Set number of lines on a screen' />
+ </params>
+ </command>
+ <command id='echo .MESSAGE'>
+ <params>
+ <param name='echo' doc='Echo a message back to the vty' />
+ <param name='.MESSAGE' doc='The message to echo' />
+ </params>
+ </command>
+ <command id='who'>
+ <params>
+ <param name='who' doc='Display who is on vty' />
+ </params>
+ </command>
+ <command id='show history'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='history' doc='Display the session command history' />
+ </params>
+ </command>
+ <command id='show bts &lt;0-255&gt;'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='bts' doc='Display information about a BTS' />
+ <param name='&lt;0-255&gt;' doc='BTS number' />
+ </params>
+ </command>
+ <command id='logging enable'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='enable' doc='Enables logging to this vty' />
+ </params>
+ </command>
+ <command id='logging disable'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='disable' doc='Disables logging to this vty' />
+ </params>
+ </command>
+ <command id='logging filter all (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='filter' doc='Filter log messages' />
+ <param name='all' doc='Do you want to log all messages?' />
+ <param name='0' doc='Only print messages matched by other filters' />
+ <param name='1' doc='Bypass filter and print all messages' />
+ </params>
+ </command>
+ <command id='logging color (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='color' doc='Configure color-printing for log messages' />
+ <param name='0' doc='Don&apos;t use color for printing messages' />
+ <param name='1' doc='Use color for printing messages' />
+ </params>
+ </command>
+ <command id='logging timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp' />
+ </params>
+ </command>
+ <command id='logging print extended-timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='extended-timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
+ </params>
+ </command>
+ <command id='logging print category (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='category' doc='Configure log message' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with category/subsystem name' />
+ </params>
+ </command>
+ <command id='logging set-log-mask MASK'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='set-log-mask' doc='Set the logmask of this logging target' />
+ <param name='MASK' doc='The logmask to use' />
+ </params>
+ </command>
+ <command id='logging set log mask MASK'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='set' doc='Decide which categories to output.' />
+ <param name='log' doc='Log commands' />
+ <param name='mask' doc='Mask commands' />
+ <param name='MASK' doc='The logmask to use' />
+ </params>
+ </command>
+ <command id='logging level (all|rsl|oml|rll|rr|meas|pag|l1c|l1p|dsp|pcu|ho|abis|rtp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp) (everything|debug|info|notice|error|fatal)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='level' doc='Set the log level for a specified category' />
+ <param name='all' doc='Global setting for all subsystems' />
+ <param name='rsl' doc='A-bis Radio Siganlling Link (RSL)' />
+ <param name='oml' doc='A-bis Network Management / O&amp;M (NM/OML)' />
+ <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
+ <param name='rr' doc='Layer3 Radio Resource (RR)' />
+ <param name='meas' doc='Radio Measurement Processing' />
+ <param name='pag' doc='Paging Subsystem' />
+ <param name='l1c' doc='Layer 1' />
+ <param name='l1p' doc='Layer 1 Primitives' />
+ <param name='dsp' doc='DSP Trace Messages' />
+ <param name='pcu' doc='PCU interface' />
+ <param name='ho' doc='Handover' />
+ <param name='abis' doc='A-bis Intput Subsystem' />
+ <param name='rtp' doc='Realtime Transfer Protocol' />
+ <param name='lglobal' doc='Library-internal global log family' />
+ <param name='llapd' doc='LAPD in libosmogsm' />
+ <param name='linp' doc='A-bis Intput Subsystem' />
+ <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
+ <param name='lmi' doc='A-bis Input Driver for Signalling' />
+ <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
+ <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
+ <param name='lctrl' doc='Control Interface' />
+ <param name='lgtp' doc='GPRS GTP library' />
+ <param name='everything' doc='Don&apos;t use. It doesn&apos;t log anything' />
+ <param name='debug' doc='Log debug messages and higher levels' />
+ <param name='info' doc='Log informational messages and higher levels' />
+ <param name='notice' doc='Log noticable messages and higher levels' />
+ <param name='error' doc='Log error messages and higher levels' />
+ <param name='fatal' doc='Log only fatal messages' />
+ </params>
+ </command>
+ <command id='show logging vty'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='logging' doc='Show current logging configuration' />
+ <param name='vty' doc='Show current logging configuration for this vty' />
+ </params>
+ </command>
+ <command id='show alarms'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='alarms' doc='Show current logging configuration' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; dsp-trace-flags'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flags' doc='Display the current setting of the DSP trace flags' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; system-information'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='system-information' doc='Display information about system' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; clock-source'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='clock-source' doc='Display the clock source for this TRX' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; dsp-trace-flag (debug|l1_warning|error|l1_rx_msg|l1_rx_msg_byte|l1_tx_msg|l1_tx_msg_byte|mph_cnf|mph_ind|mph_req|ph_ind|ph_req|phy_rf|phy_msg_byte|mode|tdma_info|bad_crc|ph_ind_byte|ph_req_byte|device_msg|rach_info|log_ch_info|memory|profiling|test_comment|test|status)'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flag' doc='DSP Trace Flag' />
+ <param name='debug' doc='Debug Region' />
+ <param name='l1_warning' doc='L1 Warning Region' />
+ <param name='error' doc='Error Region' />
+ <param name='l1_rx_msg' doc='L1_RX_MSG Region' />
+ <param name='l1_rx_msg_byte' doc='L1_RX_MSG_BYTE Region' />
+ <param name='l1_tx_msg' doc='L1_TX_MSG Region' />
+ <param name='l1_tx_msg_byte' doc='L1_TX_MSG_BYTE Region' />
+ <param name='mph_cnf' doc='MphConfirmation Region' />
+ <param name='mph_ind' doc='MphIndication Region' />
+ <param name='mph_req' doc='MphRequest Region' />
+ <param name='ph_ind' doc='PhIndication Region' />
+ <param name='ph_req' doc='PhRequest Region' />
+ <param name='phy_rf' doc='PhyRF Region' />
+ <param name='phy_msg_byte' doc='PhyRF Message Region' />
+ <param name='mode' doc='Mode Region' />
+ <param name='tdma_info' doc='TDMA Info Region' />
+ <param name='bad_crc' doc='Bad CRC Region' />
+ <param name='ph_ind_byte' doc='PH_IND_BYTE' />
+ <param name='ph_req_byte' doc='PH_REQ_BYTE' />
+ <param name='device_msg' doc='Device Message Region' />
+ <param name='rach_info' doc='RACH Info' />
+ <param name='log_ch_info' doc='LOG_CH_INFO' />
+ <param name='memory' doc='Memory Region' />
+ <param name='profiling' doc='Profiling Region' />
+ <param name='test_comment' doc='Test Comments' />
+ <param name='test' doc='Test Region' />
+ <param name='status' doc='Status Region' />
+ </params>
+ </command>
+ <command id='no trx &lt;0-0&gt; dsp-trace-flag (debug|l1_warning|error|l1_rx_msg|l1_rx_msg_byte|l1_tx_msg|l1_tx_msg_byte|mph_cnf|mph_ind|mph_req|ph_ind|ph_req|phy_rf|phy_msg_byte|mode|tdma_info|bad_crc|ph_ind_byte|ph_req_byte|device_msg|rach_info|log_ch_info|memory|profiling|test_comment|test|status)'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flag' doc='DSP Trace Flag' />
+ <param name='debug' doc='Debug Region' />
+ <param name='l1_warning' doc='L1 Warning Region' />
+ <param name='error' doc='Error Region' />
+ <param name='l1_rx_msg' doc='L1_RX_MSG Region' />
+ <param name='l1_rx_msg_byte' doc='L1_RX_MSG_BYTE Region' />
+ <param name='l1_tx_msg' doc='L1_TX_MSG Region' />
+ <param name='l1_tx_msg_byte' doc='L1_TX_MSG_BYTE Region' />
+ <param name='mph_cnf' doc='MphConfirmation Region' />
+ <param name='mph_ind' doc='MphIndication Region' />
+ <param name='mph_req' doc='MphRequest Region' />
+ <param name='ph_ind' doc='PhIndication Region' />
+ <param name='ph_req' doc='PhRequest Region' />
+ <param name='phy_rf' doc='PhyRF Region' />
+ <param name='phy_msg_byte' doc='PhyRF Message Region' />
+ <param name='mode' doc='Mode Region' />
+ <param name='tdma_info' doc='TDMA Info Region' />
+ <param name='bad_crc' doc='Bad CRC Region' />
+ <param name='ph_ind_byte' doc='PH_IND_BYTE' />
+ <param name='ph_req_byte' doc='PH_REQ_BYTE' />
+ <param name='device_msg' doc='Device Message Region' />
+ <param name='rach_info' doc='RACH Info' />
+ <param name='log_ch_info' doc='LOG_CH_INFO' />
+ <param name='memory' doc='Memory Region' />
+ <param name='profiling' doc='Profiling Region' />
+ <param name='test_comment' doc='Test Comments' />
+ <param name='test' doc='Test Region' />
+ <param name='status' doc='Status Region' />
+ </params>
+ </command>
+ <command id='show e1_driver'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_driver' doc='Display information about available E1 drivers' />
+ </params>
+ </command>
+ <command id='show e1_line [line_nr] [stats]'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_line' doc='Display information about a E1 line' />
+ <param name='[line_nr]' doc='E1 Line Number' />
+ <param name='[stats]' doc='Include statistics' />
+ </params>
+ </command>
+ <command id='show e1_timeslot [line_nr] [ts_nr]'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_timeslot' doc='Display information about a E1 timeslot' />
+ <param name='[line_nr]' doc='E1 Line Number' />
+ <param name='[ts_nr]' doc='E1 Timeslot Number' />
+ </params>
+ </command>
+ </node>
+ <node id='2'>
+ </node>
+ <node id='3'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='disable'>
+ <params>
+ <param name='disable' doc='Turn off privileged mode command' />
+ </params>
+ </command>
+ <command id='configure terminal'>
+ <params>
+ <param name='configure' doc='Configuration from vty interface' />
+ <param name='terminal' doc='Configuration terminal' />
+ </params>
+ </command>
+ <command id='copy running-config startup-config'>
+ <params>
+ <param name='copy' doc='Copy configuration' />
+ <param name='running-config' doc='Copy running config to... ' />
+ <param name='startup-config' doc='Copy running config to startup config (same as write file)' />
+ </params>
+ </command>
+ <command id='show startup-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='startup-config' doc='Contentes of startup configuration' />
+ </params>
+ </command>
+ <command id='show version'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='version' doc='Displays program version' />
+ </params>
+ </command>
+ <command id='show online-help'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='online-help' doc='Online help' />
+ </params>
+ </command>
+ <command id='terminal length &lt;0-512&gt;'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='length' doc='Set number of lines on a screen' />
+ <param name='&lt;0-512&gt;' doc='Number of lines on screen (0 for no pausing)' />
+ </params>
+ </command>
+ <command id='terminal no length'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='length' doc='Set number of lines on a screen' />
+ </params>
+ </command>
+ <command id='echo .MESSAGE'>
+ <params>
+ <param name='echo' doc='Echo a message back to the vty' />
+ <param name='.MESSAGE' doc='The message to echo' />
+ </params>
+ </command>
+ <command id='who'>
+ <params>
+ <param name='who' doc='Display who is on vty' />
+ </params>
+ </command>
+ <command id='show history'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='history' doc='Display the session command history' />
+ </params>
+ </command>
+ <command id='terminal monitor'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='monitor' doc='Copy debug output to the current terminal line' />
+ </params>
+ </command>
+ <command id='terminal no monitor'>
+ <params>
+ <param name='terminal' doc='Set terminal line parameters' />
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='monitor' doc='Copy debug output to the current terminal line' />
+ </params>
+ </command>
+ <command id='show bts &lt;0-255&gt;'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='bts' doc='Display information about a BTS' />
+ <param name='&lt;0-255&gt;' doc='BTS number' />
+ </params>
+ </command>
+ <command id='logging enable'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='enable' doc='Enables logging to this vty' />
+ </params>
+ </command>
+ <command id='logging disable'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='disable' doc='Disables logging to this vty' />
+ </params>
+ </command>
+ <command id='logging filter all (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='filter' doc='Filter log messages' />
+ <param name='all' doc='Do you want to log all messages?' />
+ <param name='0' doc='Only print messages matched by other filters' />
+ <param name='1' doc='Bypass filter and print all messages' />
+ </params>
+ </command>
+ <command id='logging color (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='color' doc='Configure color-printing for log messages' />
+ <param name='0' doc='Don&apos;t use color for printing messages' />
+ <param name='1' doc='Use color for printing messages' />
+ </params>
+ </command>
+ <command id='logging timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp' />
+ </params>
+ </command>
+ <command id='logging print extended-timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='extended-timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
+ </params>
+ </command>
+ <command id='logging print category (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='category' doc='Configure log message' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with category/subsystem name' />
+ </params>
+ </command>
+ <command id='logging set-log-mask MASK'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='set-log-mask' doc='Set the logmask of this logging target' />
+ <param name='MASK' doc='The logmask to use' />
+ </params>
+ </command>
+ <command id='logging set log mask MASK'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='set' doc='Decide which categories to output.' />
+ <param name='log' doc='Log commands' />
+ <param name='mask' doc='Mask commands' />
+ <param name='MASK' doc='The logmask to use' />
+ </params>
+ </command>
+ <command id='logging level (all|rsl|oml|rll|rr|meas|pag|l1c|l1p|dsp|pcu|ho|abis|rtp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp) (everything|debug|info|notice|error|fatal)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='level' doc='Set the log level for a specified category' />
+ <param name='all' doc='Global setting for all subsystems' />
+ <param name='rsl' doc='A-bis Radio Siganlling Link (RSL)' />
+ <param name='oml' doc='A-bis Network Management / O&amp;M (NM/OML)' />
+ <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
+ <param name='rr' doc='Layer3 Radio Resource (RR)' />
+ <param name='meas' doc='Radio Measurement Processing' />
+ <param name='pag' doc='Paging Subsystem' />
+ <param name='l1c' doc='Layer 1' />
+ <param name='l1p' doc='Layer 1 Primitives' />
+ <param name='dsp' doc='DSP Trace Messages' />
+ <param name='pcu' doc='PCU interface' />
+ <param name='ho' doc='Handover' />
+ <param name='abis' doc='A-bis Intput Subsystem' />
+ <param name='rtp' doc='Realtime Transfer Protocol' />
+ <param name='lglobal' doc='Library-internal global log family' />
+ <param name='llapd' doc='LAPD in libosmogsm' />
+ <param name='linp' doc='A-bis Intput Subsystem' />
+ <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
+ <param name='lmi' doc='A-bis Input Driver for Signalling' />
+ <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
+ <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
+ <param name='lctrl' doc='Control Interface' />
+ <param name='lgtp' doc='GPRS GTP library' />
+ <param name='everything' doc='Don&apos;t use. It doesn&apos;t log anything' />
+ <param name='debug' doc='Log debug messages and higher levels' />
+ <param name='info' doc='Log informational messages and higher levels' />
+ <param name='notice' doc='Log noticable messages and higher levels' />
+ <param name='error' doc='Log error messages and higher levels' />
+ <param name='fatal' doc='Log only fatal messages' />
+ </params>
+ </command>
+ <command id='show logging vty'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='logging' doc='Show current logging configuration' />
+ <param name='vty' doc='Show current logging configuration for this vty' />
+ </params>
+ </command>
+ <command id='show alarms'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='alarms' doc='Show current logging configuration' />
+ </params>
+ </command>
+ <command id='bts &lt;0-0&gt; trx &lt;0-0&gt; ts &lt;0-7&gt; lchan &lt;0-1&gt; rtp jitter-buffer &lt;0-10000&gt;'>
+ <params>
+ <param name='bts' doc='BTS related commands' />
+ <param name='&lt;0-0&gt;' doc='BTS number' />
+ <param name='trx' doc='TRX related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='ts' doc='timeslot related commands' />
+ <param name='&lt;0-7&gt;' doc='timeslot number' />
+ <param name='lchan' doc='logical channel commands' />
+ <param name='&lt;0-1&gt;' doc='logical channel number' />
+ <param name='rtp' doc='RTP settings' />
+ <param name='jitter-buffer' doc='Jitter buffer' />
+ <param name='&lt;0-10000&gt;' doc='Size of jitter buffer in (ms)' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; dsp-trace-flags'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flags' doc='Display the current setting of the DSP trace flags' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; system-information'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='system-information' doc='Display information about system' />
+ </params>
+ </command>
+ <command id='show trx &lt;0-0&gt; clock-source'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='clock-source' doc='Display the clock source for this TRX' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; dsp-trace-flag (debug|l1_warning|error|l1_rx_msg|l1_rx_msg_byte|l1_tx_msg|l1_tx_msg_byte|mph_cnf|mph_ind|mph_req|ph_ind|ph_req|phy_rf|phy_msg_byte|mode|tdma_info|bad_crc|ph_ind_byte|ph_req_byte|device_msg|rach_info|log_ch_info|memory|profiling|test_comment|test|status)'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flag' doc='DSP Trace Flag' />
+ <param name='debug' doc='Debug Region' />
+ <param name='l1_warning' doc='L1 Warning Region' />
+ <param name='error' doc='Error Region' />
+ <param name='l1_rx_msg' doc='L1_RX_MSG Region' />
+ <param name='l1_rx_msg_byte' doc='L1_RX_MSG_BYTE Region' />
+ <param name='l1_tx_msg' doc='L1_TX_MSG Region' />
+ <param name='l1_tx_msg_byte' doc='L1_TX_MSG_BYTE Region' />
+ <param name='mph_cnf' doc='MphConfirmation Region' />
+ <param name='mph_ind' doc='MphIndication Region' />
+ <param name='mph_req' doc='MphRequest Region' />
+ <param name='ph_ind' doc='PhIndication Region' />
+ <param name='ph_req' doc='PhRequest Region' />
+ <param name='phy_rf' doc='PhyRF Region' />
+ <param name='phy_msg_byte' doc='PhyRF Message Region' />
+ <param name='mode' doc='Mode Region' />
+ <param name='tdma_info' doc='TDMA Info Region' />
+ <param name='bad_crc' doc='Bad CRC Region' />
+ <param name='ph_ind_byte' doc='PH_IND_BYTE' />
+ <param name='ph_req_byte' doc='PH_REQ_BYTE' />
+ <param name='device_msg' doc='Device Message Region' />
+ <param name='rach_info' doc='RACH Info' />
+ <param name='log_ch_info' doc='LOG_CH_INFO' />
+ <param name='memory' doc='Memory Region' />
+ <param name='profiling' doc='Profiling Region' />
+ <param name='test_comment' doc='Test Comments' />
+ <param name='test' doc='Test Region' />
+ <param name='status' doc='Status Region' />
+ </params>
+ </command>
+ <command id='no trx &lt;0-0&gt; dsp-trace-flag (debug|l1_warning|error|l1_rx_msg|l1_rx_msg_byte|l1_tx_msg|l1_tx_msg_byte|mph_cnf|mph_ind|mph_req|ph_ind|ph_req|phy_rf|phy_msg_byte|mode|tdma_info|bad_crc|ph_ind_byte|ph_req_byte|device_msg|rach_info|log_ch_info|memory|profiling|test_comment|test|status)'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='dsp-trace-flag' doc='DSP Trace Flag' />
+ <param name='debug' doc='Debug Region' />
+ <param name='l1_warning' doc='L1 Warning Region' />
+ <param name='error' doc='Error Region' />
+ <param name='l1_rx_msg' doc='L1_RX_MSG Region' />
+ <param name='l1_rx_msg_byte' doc='L1_RX_MSG_BYTE Region' />
+ <param name='l1_tx_msg' doc='L1_TX_MSG Region' />
+ <param name='l1_tx_msg_byte' doc='L1_TX_MSG_BYTE Region' />
+ <param name='mph_cnf' doc='MphConfirmation Region' />
+ <param name='mph_ind' doc='MphIndication Region' />
+ <param name='mph_req' doc='MphRequest Region' />
+ <param name='ph_ind' doc='PhIndication Region' />
+ <param name='ph_req' doc='PhRequest Region' />
+ <param name='phy_rf' doc='PhyRF Region' />
+ <param name='phy_msg_byte' doc='PhyRF Message Region' />
+ <param name='mode' doc='Mode Region' />
+ <param name='tdma_info' doc='TDMA Info Region' />
+ <param name='bad_crc' doc='Bad CRC Region' />
+ <param name='ph_ind_byte' doc='PH_IND_BYTE' />
+ <param name='ph_req_byte' doc='PH_REQ_BYTE' />
+ <param name='device_msg' doc='Device Message Region' />
+ <param name='rach_info' doc='RACH Info' />
+ <param name='log_ch_info' doc='LOG_CH_INFO' />
+ <param name='memory' doc='Memory Region' />
+ <param name='profiling' doc='Profiling Region' />
+ <param name='test_comment' doc='Test Comments' />
+ <param name='test' doc='Test Region' />
+ <param name='status' doc='Status Region' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; &lt;0-7&gt; (activate|deactivate) &lt;0-7&gt;'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='&lt;0-7&gt;' doc='Timeslot number' />
+ <param name='activate' doc='Activate Logical Channel' />
+ <param name='deactivate' doc='Deactivate Logical Channel' />
+ <param name='&lt;0-7&gt;' doc='Logical Channel Number' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; tx-power &lt;-110-100&gt;'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='tx-power' doc='Set transmit power (override BSC)' />
+ <param name='&lt;-110-100&gt;' doc='Transmit power in dBm' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; rf-clock-info reset'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='rf-clock-info' doc='RF Clock Information' />
+ <param name='reset' doc='Reset the counter' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; rf-clock-info correct'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='rf-clock-info' doc='RF Clock Information' />
+ <param name='correct' doc='Apply' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt; &lt;0-7&gt; loopback &lt;0-1&gt;'>
+ <params>
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='&lt;0-7&gt;' doc='Timeslot number' />
+ <param name='loopback' doc='Set TCH loopback' />
+ <param name='&lt;0-1&gt;' doc='Logical Channel Number' />
+ </params>
+ </command>
+ <command id='no trx &lt;0-0&gt; &lt;0-7&gt; loopback &lt;0-1&gt;'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='trx' doc='Transceiver related commands' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ <param name='&lt;0-7&gt;' doc='Timeslot number' />
+ <param name='loopback' doc='Set TCH loopback' />
+ <param name='&lt;0-1&gt;' doc='Logical Channel Number' />
+ </params>
+ </command>
+ <command id='show e1_driver'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_driver' doc='Display information about available E1 drivers' />
+ </params>
+ </command>
+ <command id='show e1_line [line_nr] [stats]'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_line' doc='Display information about a E1 line' />
+ <param name='[line_nr]' doc='E1 Line Number' />
+ <param name='[stats]' doc='Include statistics' />
+ </params>
+ </command>
+ <command id='show e1_timeslot [line_nr] [ts_nr]'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='e1_timeslot' doc='Display information about a E1 timeslot' />
+ <param name='[line_nr]' doc='E1 Line Number' />
+ <param name='[ts_nr]' doc='E1 Timeslot Number' />
+ </params>
+ </command>
+ </node>
+ <node id='4'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='end'>
+ <params>
+ <param name='end' doc='End current mode and change to enable mode.' />
+ </params>
+ </command>
+ <command id='hostname WORD'>
+ <params>
+ <param name='hostname' doc='Set system&apos;s network name' />
+ <param name='WORD' doc='This system&apos;s network name' />
+ </params>
+ </command>
+ <command id='no hostname [HOSTNAME]'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='hostname' doc='Reset system&apos;s network name' />
+ <param name='[HOSTNAME]' doc='Host name of this router' />
+ </params>
+ </command>
+ <command id='password (8|) WORD'>
+ <params>
+ <param name='password' doc='Assign the terminal connection password' />
+ <param name='8' doc='Specifies a HIDDEN password will follow' />
+ <param name='' doc='dummy string ' />
+ <param name='WORD' doc='The HIDDEN line password string' />
+ </params>
+ </command>
+ <command id='password LINE'>
+ <params>
+ <param name='password' doc='Assign the terminal connection password' />
+ <param name='LINE' doc='The UNENCRYPTED (cleartext) line password' />
+ </params>
+ </command>
+ <command id='enable password (8|) WORD'>
+ <params>
+ <param name='enable' doc='Modify enable password parameters' />
+ <param name='password' doc='Assign the privileged level password' />
+ <param name='8' doc='Specifies a HIDDEN password will follow' />
+ <param name='' doc='dummy string ' />
+ <param name='WORD' doc='The HIDDEN &apos;enable&apos; password string' />
+ </params>
+ </command>
+ <command id='enable password LINE'>
+ <params>
+ <param name='enable' doc='Modify enable password parameters' />
+ <param name='password' doc='Assign the privileged level password' />
+ <param name='LINE' doc='The UNENCRYPTED (cleartext) &apos;enable&apos; password' />
+ </params>
+ </command>
+ <command id='no enable password'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='enable' doc='Modify enable password parameters' />
+ <param name='password' doc='Assign the privileged level password' />
+ </params>
+ </command>
+ <command id='banner motd default'>
+ <params>
+ <param name='banner' doc='Set banner string' />
+ <param name='motd' doc='Strings for motd' />
+ <param name='default' doc='Default string' />
+ </params>
+ </command>
+ <command id='banner motd file [FILE]'>
+ <params>
+ <param name='banner' doc='Set banner' />
+ <param name='motd' doc='Banner for motd' />
+ <param name='file' doc='Banner from a file' />
+ <param name='[FILE]' doc='Filename' />
+ </params>
+ </command>
+ <command id='no banner motd'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='banner' doc='Set banner string' />
+ <param name='motd' doc='Strings for motd' />
+ </params>
+ </command>
+ <command id='service terminal-length &lt;0-512&gt;'>
+ <params>
+ <param name='service' doc='Set up miscellaneous service' />
+ <param name='terminal-length' doc='System wide terminal length configuration' />
+ <param name='&lt;0-512&gt;' doc='Number of lines of VTY (0 means no line control)' />
+ </params>
+ </command>
+ <command id='no service terminal-length [&lt;0-512&gt;]'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='service' doc='Set up miscellaneous service' />
+ <param name='terminal-length' doc='System wide terminal length configuration' />
+ <param name='[&lt;0-512&gt;]' doc='Number of lines of VTY (0 means no line control)' />
+ </params>
+ </command>
+ <command id='line vty'>
+ <params>
+ <param name='line' doc='Configure a terminal line' />
+ <param name='vty' doc='Virtual terminal' />
+ </params>
+ </command>
+ <command id='service advanced-vty'>
+ <params>
+ <param name='service' doc='Set up miscellaneous service' />
+ <param name='advanced-vty' doc='Enable advanced mode vty interface' />
+ </params>
+ </command>
+ <command id='no service advanced-vty'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='service' doc='Set up miscellaneous service' />
+ <param name='advanced-vty' doc='Enable advanced mode vty interface' />
+ </params>
+ </command>
+ <command id='show history'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='history' doc='Display the session command history' />
+ </params>
+ </command>
+ <command id='log stderr'>
+ <params>
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='stderr' doc='Logging via STDERR of the process' />
+ </params>
+ </command>
+ <command id='no log stderr'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='stderr' doc='Logging via STDERR of the process' />
+ </params>
+ </command>
+ <command id='log file .FILENAME'>
+ <params>
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='file' doc='Logging to text file' />
+ <param name='.FILENAME' doc='Filename' />
+ </params>
+ </command>
+ <command id='no log file .FILENAME'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='file' doc='Logging to text file' />
+ <param name='.FILENAME' doc='Filename' />
+ </params>
+ </command>
+ <command id='log alarms &lt;2-32700&gt;'>
+ <params>
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='alarms' doc='Logging alarms to osmo_strrb' />
+ <param name='&lt;2-32700&gt;' doc='Maximum number of messages to log' />
+ </params>
+ </command>
+ <command id='no log alarms'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='alarms' doc='Logging alarms to osmo_strrb' />
+ </params>
+ </command>
+ <command id='log syslog (authpriv|cron|daemon|ftp|lpr|mail|news|user|uucp)'>
+ <params>
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='syslog' doc='Logging via syslog' />
+ <param name='authpriv' doc='Security/authorization messages facility' />
+ <param name='cron' doc='Clock daemon (cron/at) facility' />
+ <param name='daemon' doc='General system daemon facility' />
+ <param name='ftp' doc='Ftp daemon facility' />
+ <param name='lpr' doc='Line printer facility' />
+ <param name='mail' doc='Mail facility' />
+ <param name='news' doc='News facility' />
+ <param name='user' doc='Generic facility' />
+ <param name='uucp' doc='UUCP facility' />
+ </params>
+ </command>
+ <command id='log syslog local &lt;0-7&gt;'>
+ <params>
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='syslog' doc='Logging via syslog' />
+ <param name='local' doc='Syslog LOCAL facility' />
+ <param name='&lt;0-7&gt;' doc='Local facility number' />
+ </params>
+ </command>
+ <command id='no log syslog'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='log' doc='Configure logging sub-system' />
+ <param name='syslog' doc='Logging via syslog' />
+ </params>
+ </command>
+ <command id='bts BTS_NR'>
+ <params>
+ <param name='bts' doc='Select a BTS to configure' />
+ <param name='BTS_NR' doc='BTS Number' />
+ </params>
+ </command>
+ <command id='e1_input'>
+ <params>
+ <param name='e1_input' doc='Configure E1/T1/J1 TDM input' />
+ </params>
+ </command>
+ </node>
+ <node id='7'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='end'>
+ <params>
+ <param name='end' doc='End current mode and change to enable mode.' />
+ </params>
+ </command>
+ <command id='logging filter all (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='filter' doc='Filter log messages' />
+ <param name='all' doc='Do you want to log all messages?' />
+ <param name='0' doc='Only print messages matched by other filters' />
+ <param name='1' doc='Bypass filter and print all messages' />
+ </params>
+ </command>
+ <command id='logging color (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='color' doc='Configure color-printing for log messages' />
+ <param name='0' doc='Don&apos;t use color for printing messages' />
+ <param name='1' doc='Use color for printing messages' />
+ </params>
+ </command>
+ <command id='logging timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp' />
+ </params>
+ </command>
+ <command id='logging print extended-timestamp (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='extended-timestamp' doc='Configure log message timestamping' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with current timestamp with YYYYMMDDhhmmssnnn' />
+ </params>
+ </command>
+ <command id='logging print category (0|1)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='print' doc='Log output settings' />
+ <param name='category' doc='Configure log message' />
+ <param name='0' doc='Don&apos;t prefix each log message' />
+ <param name='1' doc='Prefix each log message with category/subsystem name' />
+ </params>
+ </command>
+ <command id='logging level (all|rsl|oml|rll|rr|meas|pag|l1c|l1p|dsp|pcu|ho|abis|rtp|lglobal|llapd|linp|lmux|lmi|lmib|lsms|lctrl|lgtp) (everything|debug|info|notice|error|fatal)'>
+ <params>
+ <param name='logging' doc='Configure log message to this terminal' />
+ <param name='level' doc='Set the log level for a specified category' />
+ <param name='all' doc='Global setting for all subsystems' />
+ <param name='rsl' doc='A-bis Radio Siganlling Link (RSL)' />
+ <param name='oml' doc='A-bis Network Management / O&amp;M (NM/OML)' />
+ <param name='rll' doc='A-bis Radio Link Layer (RLL)' />
+ <param name='rr' doc='Layer3 Radio Resource (RR)' />
+ <param name='meas' doc='Radio Measurement Processing' />
+ <param name='pag' doc='Paging Subsystem' />
+ <param name='l1c' doc='Layer 1' />
+ <param name='l1p' doc='Layer 1 Primitives' />
+ <param name='dsp' doc='DSP Trace Messages' />
+ <param name='pcu' doc='PCU interface' />
+ <param name='ho' doc='Handover' />
+ <param name='abis' doc='A-bis Intput Subsystem' />
+ <param name='rtp' doc='Realtime Transfer Protocol' />
+ <param name='lglobal' doc='Library-internal global log family' />
+ <param name='llapd' doc='LAPD in libosmogsm' />
+ <param name='linp' doc='A-bis Intput Subsystem' />
+ <param name='lmux' doc='A-bis B-Subchannel TRAU Frame Multiplex' />
+ <param name='lmi' doc='A-bis Input Driver for Signalling' />
+ <param name='lmib' doc='A-bis Input Driver for B-Channels (voice)' />
+ <param name='lsms' doc='Layer3 Short Message Service (SMS)' />
+ <param name='lctrl' doc='Control Interface' />
+ <param name='lgtp' doc='GPRS GTP library' />
+ <param name='everything' doc='Don&apos;t use. It doesn&apos;t log anything' />
+ <param name='debug' doc='Log debug messages and higher levels' />
+ <param name='info' doc='Log informational messages and higher levels' />
+ <param name='notice' doc='Log noticable messages and higher levels' />
+ <param name='error' doc='Log error messages and higher levels' />
+ <param name='fatal' doc='Log only fatal messages' />
+ </params>
+ </command>
+ </node>
+ <node id='8'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='end'>
+ <params>
+ <param name='end' doc='End current mode and change to enable mode.' />
+ </params>
+ </command>
+ <command id='login'>
+ <params>
+ <param name='login' doc='Enable password checking' />
+ </params>
+ </command>
+ <command id='no login'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='login' doc='Enable password checking' />
+ </params>
+ </command>
+ </node>
+ <node id='9'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='exit'>
+ <params>
+ <param name='exit' doc='Exit current mode and down to previous mode' />
+ </params>
+ </command>
+ <command id='end'>
+ <params>
+ <param name='end' doc='End current mode and change to enable mode.' />
+ </params>
+ </command>
+ <command id='e1_line &lt;0-255&gt; driver (misdn|misdn_lapd|dahdi|ipa)'>
+ <params>
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='driver' doc='Set driver for this line' />
+ <param name='misdn' doc='mISDN supported E1 Card (kernel LAPD)' />
+ <param name='misdn_lapd' doc='mISDN supported E1 Card (userspace LAPD)' />
+ <param name='dahdi' doc='DAHDI supported E1/T1/J1 Card' />
+ <param name='ipa' doc='IPA TCP/IP input' />
+ </params>
+ </command>
+ <command id='e1_line &lt;0-255&gt; port &lt;0-255&gt;'>
+ <params>
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='port' doc='Set physical port/span/card number' />
+ <param name='&lt;0-255&gt;' doc='E1/T1 Port/Span/Card number' />
+ </params>
+ </command>
+ <command id='e1_line &lt;0-255&gt; name .LINE'>
+ <params>
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='name' doc='Set name for this line' />
+ <param name='.LINE' doc='Human readable name' />
+ </params>
+ </command>
+ <command id='e1_line &lt;0-255&gt; keepalive'>
+ <params>
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='keepalive' doc='Enable keep-alive probing' />
+ </params>
+ </command>
+ <command id='e1_line &lt;0-255&gt; keepalive &lt;1-300&gt; &lt;1-20&gt; &lt;1-300&gt;'>
+ <params>
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='keepalive' doc='Enable keep-alive probing' />
+ <param name='&lt;1-300&gt;' doc='Idle interval in seconds before probes are sent' />
+ <param name='&lt;1-20&gt;' doc='Number of probes to sent' />
+ <param name='&lt;1-300&gt;' doc='Delay between probe packets in seconds' />
+ </params>
+ </command>
+ <command id='no e1_line &lt;0-255&gt; keepalive'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='e1_line' doc='Configure E1/T1/J1 Line' />
+ <param name='&lt;0-255&gt;' doc='Line Number' />
+ <param name='keepalive' doc='Enable keep-alive probing' />
+ </params>
+ </command>
+ </node>
+ <node id='14'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='ipa unit-id &lt;0-65534&gt; &lt;0-255&gt;'>
+ <params>
+ <param name='ipa' doc='ip.access RSL commands' />
+ <param name='unit-id' doc='Set the Unit ID of this BTS' />
+ <param name='&lt;0-65534&gt;' doc='Site ID' />
+ <param name='&lt;0-255&gt;' doc='Unit ID' />
+ </params>
+ </command>
+ <command id='oml remote-ip A.B.C.D'>
+ <params>
+ <param name='oml' doc='OML Parameters' />
+ <param name='remote-ip' doc='OML IP Address' />
+ <param name='A.B.C.D' doc='OML IP Address' />
+ </params>
+ </command>
+ <command id='rtp bind-ip A.B.C.D'>
+ <params>
+ <param name='rtp' doc='RTP parameters' />
+ <param name='bind-ip' doc='RTP local bind IP Address' />
+ <param name='A.B.C.D' doc='RTP local bind IP Address' />
+ </params>
+ </command>
+ <command id='rtp jitter-buffer &lt;0-10000&gt;'>
+ <params>
+ <param name='rtp' doc='RTP parameters' />
+ <param name='jitter-buffer' doc='RTP jitter buffer' />
+ <param name='&lt;0-10000&gt;' doc='jitter buffer in ms' />
+ </params>
+ </command>
+ <command id='band (450|GSM450|480|GSM480|750|GSM750|810|GSM810|850|GSM850|900|GSM900|1800|DCS1800|1900|PCS1900)'>
+ <params>
+ <param name='band' doc='Set the frequency band of this BTS' />
+ <param name='450' doc='Alias for GSM450' />
+ <param name='GSM450' doc='450Mhz' />
+ <param name='480' doc='Alias for GSM480' />
+ <param name='GSM480' doc='480Mhz' />
+ <param name='750' doc='Alias for GSM750' />
+ <param name='GSM750' doc='750Mhz' />
+ <param name='810' doc='Alias for GSM810' />
+ <param name='GSM810' doc='810Mhz' />
+ <param name='850' doc='Alias for GSM850' />
+ <param name='GSM850' doc='850Mhz' />
+ <param name='900' doc='Alias for GSM900' />
+ <param name='GSM900' doc='900Mhz' />
+ <param name='1800' doc='Alias for DCS1800' />
+ <param name='DCS1800' doc='1800Mhz' />
+ <param name='1900' doc='Alias for PCS1900' />
+ <param name='PCS1900' doc='1900Mhz' />
+ </params>
+ </command>
+ <command id='description .TEXT'>
+ <params>
+ <param name='description' doc='Save human-readable decription of the object' />
+ <param name='.TEXT' doc='Text until the end of the line' />
+ </params>
+ </command>
+ <command id='no description'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='description' doc='Remove description of the object' />
+ </params>
+ </command>
+ <command id='paging queue-size &lt;1-1024&gt;'>
+ <params>
+ <param name='paging' doc='Paging related parameters' />
+ <param name='queue-size' doc='Maximum length of BTS-internal paging queue' />
+ <param name='&lt;1-1024&gt;' doc='Maximum length of BTS-internal paging queue' />
+ </params>
+ </command>
+ <command id='paging lifetime &lt;0-60&gt;'>
+ <params>
+ <param name='paging' doc='Paging related parameters' />
+ <param name='lifetime' doc='Maximum lifetime of a paging record' />
+ <param name='&lt;0-60&gt;' doc='Maximum lifetime of a paging record (secods)' />
+ </params>
+ </command>
+ <command id='agch-queue-mgmt default'>
+ <params>
+ <param name='agch-queue-mgmt' doc='AGCH queue mgmt' />
+ <param name='default' doc='Reset clean parameters to default values' />
+ </params>
+ </command>
+ <command id='agch-queue-mgmt threshold &lt;0-100&gt; low &lt;0-100&gt; high &lt;0-100000&gt;'>
+ <params>
+ <param name='agch-queue-mgmt' doc='AGCH queue mgmt' />
+ <param name='threshold' doc='Threshold to start cleanup' />
+ <param name='&lt;0-100&gt;' doc='in %% of the maximum queue length' />
+ <param name='low' doc='Low water mark for cleanup' />
+ <param name='&lt;0-100&gt;' doc='in %% of the maximum queue length' />
+ <param name='high' doc='High water mark for cleanup' />
+ <param name='&lt;0-100000&gt;' doc='in %% of the maximum queue length' />
+ </params>
+ </command>
+ <command id='trx &lt;0-0&gt;'>
+ <params>
+ <param name='trx' doc='Select a TRX to configure' />
+ <param name='&lt;0-0&gt;' doc='TRX number' />
+ </params>
+ </command>
+ <command id='auto-band'>
+ <params>
+ <param name='auto-band' doc='Automatically select band for ARFCN based on configured band' />
+ </params>
+ </command>
+ <command id='no auto-band'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='auto-band' doc='Automatically select band for ARFCN based on configured band' />
+ </params>
+ </command>
+ </node>
+ <node id='15'>
+ <command id='help'>
+ <params>
+ <param name='help' doc='Description of the interactive help system' />
+ </params>
+ </command>
+ <command id='list'>
+ <params>
+ <param name='list' doc='Print command list' />
+ </params>
+ </command>
+ <command id='write terminal'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='terminal' doc='Write to terminal' />
+ </params>
+ </command>
+ <command id='write file'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='file' doc='Write to configuration file' />
+ </params>
+ </command>
+ <command id='write memory'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ <param name='memory' doc='Write configuration to the file (same as write file)' />
+ </params>
+ </command>
+ <command id='write'>
+ <params>
+ <param name='write' doc='Write running configuration to memory, network, or terminal' />
+ </params>
+ </command>
+ <command id='show running-config'>
+ <params>
+ <param name='show' doc='Show running system information' />
+ <param name='running-config' doc='running configuration' />
+ </params>
+ </command>
+ <command id='user-gain &lt;-100000-100000&gt; (dB|mdB)'>
+ <params>
+ <param name='user-gain' doc='Inform BTS about additional, user-provided gain or attenuation at TRX output' />
+ <param name='&lt;-100000-100000&gt;' doc='Value of user-provided external gain(+)/attenuation(-)' />
+ <param name='dB' doc='Unit is dB (decibels)' />
+ <param name='mdB' doc='Unit is mdB (milli-decibels, or rather 1/10000 bel)' />
+ </params>
+ </command>
+ <command id='power-ramp max-initial &lt;0-100000&gt; (dBm|mdBm)'>
+ <params>
+ <param name='power-ramp' doc='Power-Ramp settingsMaximum initial power' />
+ <param name='max-initial' doc='Value' />
+ <param name='&lt;0-100000&gt;' doc='Unit is dB (decibels)' />
+ <param name='dBm' doc='Unit is mdB (milli-decibels, or rather 1/10000 bel)' />
+ <param name='mdBm' doc='(null)' />
+ </params>
+ </command>
+ <command id='power-ramp step-size &lt;1-100000&gt; (dB|mdB)'>
+ <params>
+ <param name='power-ramp' doc='Power-Ramp settingsPower increase by step' />
+ <param name='step-size' doc='Step size' />
+ <param name='&lt;1-100000&gt;' doc='Unit is dB (decibels)' />
+ <param name='dB' doc='Unit is mdB (milli-decibels, or rather 1/10000 bel)' />
+ <param name='mdB' doc='(null)' />
+ </params>
+ </command>
+ <command id='power-ramp step-interval &lt;1-100&gt;'>
+ <params>
+ <param name='power-ramp' doc='Power-Ramp settingsPower increase by step' />
+ <param name='step-interval' doc='Step time in seconds' />
+ <param name='&lt;1-100&gt;' doc='(null)' />
+ </params>
+ </command>
+ <command id='ms-power-control (dsp|osmo)'>
+ <params>
+ <param name='ms-power-control' doc='Mobile Station Power Level Control (change requires restart)' />
+ <param name='dsp' doc='Handled by DSP' />
+ <param name='osmo' doc='Handled by OsmoBTS' />
+ </params>
+ </command>
+ <command id='clock-calibration &lt;-4095-4095&gt;'>
+ <params>
+ <param name='clock-calibration' doc='Set the clock calibration value' />
+ <param name='&lt;-4095-4095&gt;' doc='Offset in PPB' />
+ </params>
+ </command>
+ <command id='clock-calibration eeprom'>
+ <params>
+ <param name='clock-calibration' doc='Use the eeprom clock calibration value' />
+ <param name='eeprom' doc='(null)' />
+ </params>
+ </command>
+ <command id='clock-calibration default'>
+ <params>
+ <param name='clock-calibration' doc='Set the clock calibration value' />
+ <param name='default' doc='Default Clock DAC value' />
+ </params>
+ </command>
+ <command id='clock-source (tcxo|ocxo|ext|gps)'>
+ <params>
+ <param name='clock-source' doc='Set the clock source value' />
+ <param name='tcxo' doc='Use the TCXO' />
+ <param name='ocxo' doc='Use the OCXO' />
+ <param name='ext' doc='Use an external clock' />
+ <param name='gps' doc='Use the GPS pps' />
+ </params>
+ </command>
+ <command id='trx-calibration-path PATH'>
+ <params>
+ <param name='trx-calibration-path' doc='Set the path name to TRX calibration data' />
+ <param name='PATH' doc='Path name' />
+ </params>
+ </command>
+ <command id='gsmtap-sapi (idle|fcch|sch|sacch|sdcch|bcch|pch|agch|cbch|rach|tch/f|facch/f|tch/h|facch/h|nch|pdtch|pacch|pbcch|pagch|ppch|pnch|ptcch|prach)'>
+ <params>
+ <param name='gsmtap-sapi' doc='GSMTAP SAPI' />
+ <param name='idle' doc='IDLE' />
+ <param name='fcch' doc='FCCH' />
+ <param name='sch' doc='SCH' />
+ <param name='sacch' doc='SACCH' />
+ <param name='sdcch' doc='SDCCH' />
+ <param name='bcch' doc='BCCH' />
+ <param name='pch' doc='PCH' />
+ <param name='agch' doc='AGCH' />
+ <param name='cbch' doc='CBCH' />
+ <param name='rach' doc='RACH' />
+ <param name='tch/f' doc='TCH/F' />
+ <param name='facch/f' doc='FACCH/F' />
+ <param name='tch/h' doc='TCH/H' />
+ <param name='facch/h' doc='FACCH/H' />
+ <param name='nch' doc='NCH' />
+ <param name='pdtch' doc='PDTCH' />
+ <param name='pacch' doc='PACCH' />
+ <param name='pbcch' doc='PBCCH' />
+ <param name='pagch' doc='PAGCH' />
+ <param name='ppch' doc='PPCH' />
+ <param name='pnch' doc='PNCH' />
+ <param name='ptcch' doc='PTCCH' />
+ <param name='prach' doc='PRACH' />
+ </params>
+ </command>
+ <command id='no gsmtap-sapi (idle|fcch|sch|sacch|sdcch|bcch|pch|agch|cbch|rach|tch/f|facch/f|tch/h|facch/h|nch|pdtch|pacch|pbcch|pagch|ppch|pnch|ptcch|prach)'>
+ <params>
+ <param name='no' doc='Negate a command or set its defaults' />
+ <param name='gsmtap-sapi' doc='GSMTAP SAPI' />
+ <param name='idle' doc='IDLE' />
+ <param name='fcch' doc='FCCH' />
+ <param name='sch' doc='SCH' />
+ <param name='sacch' doc='SACCH' />
+ <param name='sdcch' doc='SDCCH' />
+ <param name='bcch' doc='BCCH' />
+ <param name='pch' doc='PCH' />
+ <param name='agch' doc='AGCH' />
+ <param name='cbch' doc='CBCH' />
+ <param name='rach' doc='RACH' />
+ <param name='tch/f' doc='TCH/F' />
+ <param name='facch/f' doc='FACCH/F' />
+ <param name='tch/h' doc='TCH/H' />
+ <param name='facch/h' doc='FACCH/H' />
+ <param name='nch' doc='NCH' />
+ <param name='pdtch' doc='PDTCH' />
+ <param name='pacch' doc='PACCH' />
+ <param name='pbcch' doc='PBCCH' />
+ <param name='pagch' doc='PAGCH' />
+ <param name='ppch' doc='PPCH' />
+ <param name='pnch' doc='PNCH' />
+ <param name='ptcch' doc='PTCCH' />
+ <param name='prach' doc='PRACH' />
+ </params>
+ </command>
+ <command id='uplink-power-target &lt;-110-0&gt;'>
+ <params>
+ <param name='uplink-power-target' doc='Set the nominal target Rx Level for uplink power control loop' />
+ <param name='&lt;-110-0&gt;' doc='Target uplink Rx level in dBm' />
+ </params>
+ </command>
+ <command id='min-qual-rach &lt;-100-100&gt;'>
+ <params>
+ <param name='min-qual-rach' doc='Set the minimum quality level of RACH burst to be accpeted' />
+ <param name='&lt;-100-100&gt;' doc='C/I level in tenth of dB' />
+ </params>
+ </command>
+ <command id='min-qual-norm &lt;-100-100&gt;'>
+ <params>
+ <param name='min-qual-norm' doc='Set the minimum quality level of normal burst to be accpeted' />
+ <param name='&lt;-100-100&gt;' doc='C/I level in tenth of dB' />
+ </params>
+ </command>
+ <command id='nominal-tx-power &lt;0-100&gt;'>
+ <params>
+ <param name='nominal-tx-power' doc='Set the nominal transmit output power in dBm' />
+ <param name='&lt;0-100&gt;' doc='Nominal transmit output power level in dBm' />
+ </params>
+ </command>
+ </node>
+</vtydoc>