aboutsummaryrefslogtreecommitdiffstats
path: root/asn1/tetra
diff options
context:
space:
mode:
authorAnders Broman <anders.broman@ericsson.com>2011-02-02 06:35:08 +0000
committerAnders Broman <anders.broman@ericsson.com>2011-02-02 06:35:08 +0000
commitc88ad5ccb24e17f371c443dda068529b905cde70 (patch)
tree2208741b5045803cb1eb969e0907cbb3cb8f20c4 /asn1/tetra
parent78ee2208810b3b52c2b7a3b3783f082bb27b9ed6 (diff)
The Beijing Institute of Technology (BIT) and associate professor LI Hai has created a TETRA decoder for wireshark,
they made the decision to use the ASN1 infrastructure for creating the dissector and were kind enough to send the GPLed sourcecode to us(The Osmocom Group). This group is using a protocol provided by their equipment. This is an initial checkin of the code from BIT, it is not fit for inclusion in Wireshark in this state. Further patches are expected before the code can be integrated by being added to the makefiles. svn path=/trunk/; revision=35753
Diffstat (limited to 'asn1/tetra')
-rw-r--r--asn1/tetra/packet-tetra-template.c692
-rw-r--r--asn1/tetra/packet-tetra-template.h33
-rw-r--r--asn1/tetra/tetra.asn2328
-rw-r--r--asn1/tetra/tetra.cnf334
4 files changed, 3387 insertions, 0 deletions
diff --git a/asn1/tetra/packet-tetra-template.c b/asn1/tetra/packet-tetra-template.c
new file mode 100644
index 0000000000..e9631ba7fe
--- /dev/null
+++ b/asn1/tetra/packet-tetra-template.c
@@ -0,0 +1,692 @@
+/* packet-tetra.c
+ * Routines for TETRA packet dissection
+ *
+ * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
+ * Beijing Institute of Technology, China
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <glib.h>
+#include <epan/packet.h>
+#include <epan/conversation.h>
+#include <epan/asn1.h>
+#include <epan/prefs.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#include <epan/dissectors/packet-per.h>
+#include "packet-tetra.h"
+
+#define PROTO_TAG_tetra "TETRA"
+
+/* Wireshark ID of the tetra protocol */
+static int proto_tetra = -1;
+
+/* These are the handles of our subdissectors */
+static dissector_handle_t data_handle=NULL;
+
+static dissector_handle_t tetra_handle;
+void dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree);
+
+static int global_tetra_port = 7074;
+
+/* Whether the capture data include carrier numbers */
+static gboolean include_carrier_number = TRUE;
+
+/* The following hf_* variables are used to hold the Wireshark IDs of
+* our header fields; they are filled out when we call
+* proto_register_field_array() in proto_register_tetra()
+*/
+/** Kts attempt at defining the protocol */
+static gint hf_tetra = -1;
+static gint hf_tetra_header = -1;
+static gint hf_tetra_channels = -1;
+static gint hf_tetra_channel1 = -1;
+static gint hf_tetra_channel2 = -1;
+static gint hf_tetra_channel3 = -1;
+static gint hf_tetra_txreg = -1;
+static gint hf_tetra_timer = -1;
+static gint hf_tetra_pdu = -1;
+static gint hf_tetra_rvstr = -1;
+static gint hf_tetra_carriernumber = -1;
+static gint hf_tetra_rxchannel1 = -1;
+static gint hf_tetra_rxchannel2 = -1;
+static gint hf_tetra_crc = -1;
+static gint hf_tetra_len0 = -1;
+static gint hf_tetra_bits = -1;
+
+#include "packet-tetra-hf.c"
+
+/* Initialize the subtree pointers */
+static int ett_umac = -1;
+
+/* These are the ids of the subtrees that we may be creating */
+static gint ett_tetra = -1;
+static gint ett_tetra_header = -1;
+static gint ett_tetra_length = -1;
+static gint ett_tetra_txreg = -1;
+static gint ett_tetra_text = -1;
+
+#include "packet-tetra-ett.c"
+
+guint32
+dissect_my_bit_string(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, int min_len, int max_len, gboolean has_extension, tvbuff_t **value_tvb)
+{
+ proto_item *tetra_sub_item = NULL;
+ char s[256], s2[10];
+ guint32 i, byte_len, byte_offset = offset >> 3;
+ guint8 shift0, shift1, c;
+ const guint8* p;
+
+ max_len -= (offset - 104); // MAC-ACCESS only
+ shift1 = offset & 0x07;
+ shift0 = 8 - shift1;
+ byte_len = (max_len + shift1) >> 3;
+ if((max_len + shift1) & 0x07)
+ byte_len++;
+ p = tvb_get_ptr(tvb, byte_offset, byte_len);
+ s[0] = 0;
+ tetra_sub_item = proto_tree_add_item(tree, hf_index, tvb, offset >> 3, byte_len, 0);
+ for(i = 0; i < byte_len; i++)
+ {
+ s2[0] = 0;
+ c = (p[i] << shift1) | (p[i + 1] >> shift0);
+ sprintf(s2, "%02x", c);
+ strcat(s, s2);
+ }
+ proto_item_set_text(tetra_sub_item, "TM-SDU: %s", s);
+ return(offset + max_len);
+}
+
+#include "packet-tetra-fn.c"
+
+/*--- proto_register_tetra -------------------------------------------*/
+void proto_reg_handoff_tetra(void)
+{
+ static gboolean initialized=FALSE;
+
+ if (!initialized) {
+ data_handle = find_dissector("data");
+ tetra_handle = create_dissector_handle(dissect_tetra, proto_tetra);
+ dissector_add("udp.port", global_tetra_port, tetra_handle);
+ }
+
+}
+
+static const value_string channeltypenames[] = {
+ { 0, "Reserved" },
+ { 1, "AACH" },
+ { 2, "SCH/F" },
+ { 3, "SCH/HD" },
+ { 4, "Unknown" },
+ { 5, "BSCH" },
+ { 6, "BNCH" },
+ { 7, "TCH/F" },
+ { 8, "TCH/H" },
+ { 9, "TCH4.8"},
+ { 10, "TCH7.2"},
+ { 11, "STCH"},
+ { 0, NULL }
+};
+
+static const value_string recvchanneltypenames[] = {
+ { 0, "Reserved" },
+ { 1, "AACH" },
+ { 2, "SCH/F" },
+ { 3, "SCH/HD" },
+ { 4, "Unknown" },
+ { 5, "BSCH" },
+ { 6, "BNCH" },
+ { 7, "TCH/F" },
+ { 8, "TCH/H" },
+ { 9, "TCH4.8"},
+ { 10, "TCH7.2"},
+ { 11, "STCH"},
+ { 15, "SCH/HU"},
+ { 0, NULL }
+};
+void proto_register_tetra (void)
+{
+ /* A header field is something you can search/filter on.
+ *
+ * We create a structure to register our fields. It consists of an
+ * array of hf_register_info structures, each of which are of the format
+ * {&(field id), {name, abbrev, type, display, strings, bitmask, blurb, HFILL}}.
+ */
+ static hf_register_info hf[] = {
+ { &hf_tetra,
+ { "Data", "tetra.data", FT_NONE, BASE_NONE, NULL, 0x0,
+ "tetra PDU", HFILL }},
+ { &hf_tetra_header,
+ { "Registers", "tetra.header", FT_NONE, BASE_NONE, NULL, 0x0,
+ "TETRA Registers", HFILL }},
+ { &hf_tetra_channels,
+ { "Logical Channels", "tetra.channels", FT_UINT8, BASE_DEC, NULL, 0x0,
+ "The amount of logical channels", HFILL }},
+ { &hf_tetra_channel1,
+ { "Channel 1", "tetra.txchannel1", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
+ "Logical channels type", HFILL }},
+ { &hf_tetra_channel2,
+ { "Channel 2", "tetra.txchannel2", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
+ "Logical channels type", HFILL }},
+ { &hf_tetra_channel3,
+ { "Channel 3", "tetra.txchannel3", FT_UINT8, BASE_DEC, VALS(channeltypenames), 0x0,
+ "Logical channels type", HFILL }},
+ { &hf_tetra_txreg,
+ { "TxR", "tetra.txreg", FT_UINT16, BASE_HEX, NULL, 0x0,
+ "TX Register", HFILL }},
+ { &hf_tetra_rvstr,
+ { "RvSteR", "tetra.rvster", FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Receive Status Register", HFILL }},
+ { &hf_tetra_carriernumber,
+ { "Carrier Number", "tetra.carrier", FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Carrier Number", HFILL }},
+ { &hf_tetra_rxchannel1,
+ { "Channel 1", "tetra.rxchannel1", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
+ "Logical channels type", HFILL }},
+ { &hf_tetra_rxchannel2,
+ { "Channel 2", "tetra.rxchannel2", FT_UINT8, BASE_DEC, VALS(recvchanneltypenames), 0x0,
+ "Logical channels type", HFILL }},
+ { &hf_tetra_timer,
+ { "Timer", "tetra.timer", FT_UINT16, BASE_HEX, NULL, 0x0,
+ "Timer Register", HFILL }},
+ { &hf_tetra_crc,
+ { "CRC", "tetra.crc", FT_BOOLEAN, BASE_DEC, NULL, 0x0,
+ "CRC result", HFILL }},
+ { &hf_tetra_len0,
+ { "Length", "tetra.len0", FT_UINT16, BASE_DEC, NULL, 0x0,
+ "Length of the PDU", HFILL }},
+ { &hf_tetra_pdu,
+ { "PDU", "tetra.pdu", FT_BYTES, BASE_HEX, NULL, 0x0,
+ "PDU", HFILL }} ,
+
+#include "packet-tetra-hfarr.c"
+ };
+
+ /* List of subtrees */
+ static gint *ett[] = {
+ &ett_tetra,
+ &ett_tetra_header,
+ &ett_tetra_length,
+ &ett_tetra_txreg,
+ &ett_tetra_text,
+#include "packet-tetra-ettarr.c"
+ };
+
+ if (proto_tetra == -1)
+ { /* execute protocol initialization only once */
+ module_t *per_module;
+
+ proto_tetra = proto_register_protocol ("TETRA Protocol", "tetra", "tetra");
+
+ proto_register_field_array (proto_tetra, hf, array_length (hf));
+ proto_register_subtree_array (ett, array_length (ett));
+ register_dissector("tetra", dissect_tetra, proto_tetra);
+
+ per_module = prefs_register_protocol(proto_tetra, NULL);
+ prefs_register_bool_preference(per_module, "include_carrier_number",
+ "The data include carrier numbers",
+ "Whether the captured data include carrier number",
+ &include_carrier_number);
+ }
+}
+
+// Get the length of received pdu
+gint get_rx_pdu_length(guint32 channel_type)
+{
+ gint len = 0;
+
+ switch(channel_type)
+ {
+ case 1: // AACH
+ len = 14;
+ break;
+ case 2: // SCH/F
+ len = 268;
+ break;
+ case 3: // SCH/HD
+ len = 124; ;
+ break;
+ case 5: // BSCH
+ len = 60;
+ break;
+ case 6: // BNCH
+ len = 124;
+ break;
+ case 7: // TCH/F
+ len = 274;
+ break;
+ case 8: // TCH/H
+ len = 137;
+ break;
+ case 9: // TCH2.4
+ len = 144;
+ break;
+ case 10: // TCH4.8
+ len = 288;
+ break;
+ case 11: //STCH
+ len = 124;
+ break;
+ case 15: // SCH/HU
+ len = 92;
+ break;
+ default:
+ len = 0;
+ break;
+ }
+
+ return len;
+}
+
+// Get the length of transmitted pdu
+gint get_tx_pdu_length(guint32 channel_type)
+{
+ gint len = 0;
+
+ switch(channel_type)
+ {
+ case 1: // AACH
+ len = 14;
+ break;
+ case 2: // SCH/F
+ len = 268;
+ break;
+ case 3: // SCH/HD
+ len = 124;
+ break;
+ case 5: // BSCH
+ len = 60;
+ break;
+ case 6: // BNCH
+ len = 124;
+ break;
+ case 7: // TCH/F
+ len = 274;
+ break;
+ case 8: // TCH/H
+ len = 137;
+ break;
+ case 9: // TCH/2.4
+ len = 144;
+ break;
+ case 10: // TCH/4.8
+ len = 288;
+ break;
+ case 11: // STCH
+ len = 124;
+ break;
+ }
+
+ return len;
+}
+
+void dissect_tetra_UNITDATA_IND(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset)
+{
+ guint32 rxreg = 0;
+ guint32 channels = 0, i;
+ guint32 channel_type;
+ gint pdu_offset = 0;
+ proto_item *tetra_sub_item = NULL;
+ proto_tree *tetra_header_tree = NULL, *tetra_sub_tree = NULL;
+ const guint8* p;
+
+ // Length
+ tvb_memcpy(tvb, (guint8 *)&rxreg, offset, 4);
+ tetra_sub_item = proto_tree_add_uint(tetra_tree, hf_tetra_len0, tvb, offset, 4, rxreg);
+
+ // RvSteR
+ offset += 4;
+ tvb_memcpy(tvb, (guint8 *)&rxreg, offset, 4);
+ tetra_sub_item = proto_tree_add_uint(tetra_tree, hf_tetra_rvstr, tvb, offset, 4, rxreg);
+
+ // Logical channels
+ channels = rxreg & 0x3;
+ tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
+ tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
+
+ pdu_offset = offset + 4;
+ for(i = 0; i < channels; i++)
+ {
+ gint hf_channel[] = {hf_tetra_rxchannel1, hf_tetra_rxchannel2};
+ gint byte_len, bits_len, remaining_bits;
+
+ // Channel type
+ channel_type = (rxreg >> ((i + 1) * 4) ) & 0xf;
+ proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
+
+ // CRC
+ proto_tree_add_boolean( tetra_header_tree, hf_tetra_crc, tvb, offset, 4, !(rxreg >> (i + 2) & 0x01));
+
+ // PDU
+ bits_len = get_rx_pdu_length(channel_type);
+ byte_len = bits_len >> 3;
+ remaining_bits = bits_len % 8;
+ if ((remaining_bits)!=0)
+ byte_len++;
+ tetra_sub_item = proto_tree_add_item( tetra_header_tree, hf_tetra_pdu, tvb, pdu_offset, byte_len, FALSE );
+ if(!(rxreg >> (i + 2) & 0x01)) // CRC is true
+ {
+ tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
+ switch(channel_type)
+ {
+ case 15: // SCH/HU
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0]>>7)
+ {
+ case 0: //MAC-ACCESS
+
+ dissect_MAC_ACCESS_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ break;
+ case 1: //MAC-END-HU
+ dissect_MAC_END_HU_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ break;
+ }
+ break;
+ case 2: // SCH/F
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0] >> 6)
+ {
+ case 0: // MAC-DATA
+ dissect_MAC_DATA_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ case 1: // MAC-FRAG and MAC-END
+ if((p[0] >> 5) == 3)
+ dissect_MAC_END_UPLINK_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ else
+ dissect_MAC_FRAG_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ break;
+ }
+ break;
+ case 11: // STCH
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0] >> 6)
+ {
+ case 0: // MAC-DATA
+ dissect_MAC_DATA_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ break;
+ case 1: // MAC-FRAG and MAC-END
+ if((p[0] >> 5) == 3)
+ dissect_MAC_END_UP114_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+
+ else
+ dissect_MAC_FRAG120_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree);
+ break;
+ }
+ break;
+ }
+ } // if(!(rxreg >> (i + 2) & 0x01))
+
+ if ((remaining_bits)!=0)
+ byte_len--;
+ pdu_offset += byte_len;
+ }
+}
+
+void dissect_tetra_UNITDATA_REQ(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tetra_tree, int offset, gboolean dissect)
+{
+ guint32 txreg = 0;
+ guint32 channels = 0, i;
+ guint32 channel_type;
+ gint pdu_offset = 0;
+ proto_item *tetra_sub_item = NULL;
+ proto_tree *tetra_header_tree = NULL, *tetra_sub_tree = NULL;
+ const guint8* p;
+
+ // TxR
+ tvb_memcpy(tvb, (guint8 *)&txreg, offset, 4);
+ tetra_sub_item = proto_tree_add_uint(tetra_tree, hf_tetra_txreg, tvb, offset, 4, txreg);
+
+ // Logical channels
+ channels = (txreg & 0x3) + 1;
+ tetra_sub_item = proto_tree_add_uint( tetra_tree, hf_tetra_channels, tvb, offset, 4, channels );
+ tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
+ txreg >>= 2;
+ // Skip 0000B
+ if(channels == 2)
+ txreg >>= 4;
+
+ pdu_offset = offset + 4;
+ for(i = 0; i < channels; i++)
+ {
+ gint hf_channel[] = {hf_tetra_channel1, hf_tetra_channel2, hf_tetra_channel3};
+ gint byte_len, bits_len, remaining_bits;
+
+ channel_type = txreg & 0xf;
+ proto_tree_add_uint( tetra_header_tree, hf_channel[i], tvb, offset, 4, channel_type);
+ txreg >>= 4;
+ // PDU
+ bits_len = get_tx_pdu_length(channel_type);
+ byte_len = bits_len >> 3;
+ remaining_bits = bits_len % 8;
+ if ((remaining_bits)!=0)
+ byte_len++;
+ tetra_sub_item = proto_tree_add_item( tetra_header_tree, hf_tetra_pdu, tvb, pdu_offset, byte_len, FALSE );
+ if(dissect)
+ {
+ tetra_sub_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
+ switch(channel_type)
+ {
+ case 1: // AACH
+ dissect_AACH_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 2: // SCH/F
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0] >> 6)
+ {
+ case 0:
+ dissect_MAC_RESOURCE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 1: // MAC-FRAG or MAC-END
+ if((p[0] >> 5) == 3)
+ dissect_MAC_END_DOWNLINK_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ else
+ dissect_MAC_FRAG_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 2:
+ dissect_MAC_ACCESS_DEFINE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ }
+ break;
+ case 3: // SCH/HD
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0] >> 6)
+ {
+ case 0:
+ dissect_MAC_RESOURCE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 1: // MAC-FRAG or MAC-END
+ if((p[0] >> 5) == 3)
+ dissect_MAC_END_DOWN111_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ else
+ dissect_MAC_FRAG120_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 2:
+ dissect_MAC_ACCESS_DEFINE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ }
+ break;
+ case 5: // BSCH
+ dissect_BSCH_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 6: // BNCH
+ dissect_BNCH_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 11: // STCH
+ p = tvb_get_ptr(tvb, pdu_offset, 1);
+ switch(p[0] >> 6)
+ {
+ case 0:
+ dissect_MAC_RESOURCE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 1: // MAC-FRAG or MAC-END
+ if((p[0] >> 5) == 3)
+ dissect_MAC_END_DOWN111_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ else
+ dissect_MAC_FRAG120_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ case 2:
+ dissect_MAC_ACCESS_DEFINE_PDU(tvb, pdu_offset << 3, pinfo, tetra_sub_tree );
+ break;
+ }
+ break;
+ }
+ } // if(dissect)
+
+ //if ((remaining_bits)!=0)
+ //byte_len--;
+ pdu_offset += byte_len;
+ }
+}
+
+static void
+dissect_tetra(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
+{
+
+ proto_item *tetra_item = NULL;
+ proto_item *tetra_sub_item = NULL;
+ proto_tree *tetra_tree = NULL;
+ proto_tree *tetra_header_tree = NULL;
+ guint16 type = 0;
+ guint16 carriernumber = -1;
+
+ if (check_col(pinfo->cinfo, COL_PROTOCOL))
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, PROTO_TAG_tetra);
+ /* Clear out stuff in the info column */
+ if(check_col(pinfo->cinfo,COL_INFO)){
+ col_clear(pinfo->cinfo,COL_INFO);
+ }
+
+ // This is not a good way of dissecting packets. The tvb length should
+ // be sanity checked so we aren't going past the actual size of the buffer.
+// type = tvb_get_guint8( tvb, 1 ); // Get the type byte
+ tvb_memcpy(tvb, (guint8 *)&type, 0, 1);
+
+ if(include_carrier_number)
+ tvb_memcpy(tvb, (guint8 *)&carriernumber, 1, 1);
+
+
+ if (check_col(pinfo->cinfo, COL_INFO)) {
+ switch(type)
+ {
+ case 1:
+ if(include_carrier_number)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ, Carrier: %d",
+ pinfo->srcport, pinfo->destport, carriernumber);
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ",
+ pinfo->srcport, pinfo->destport);
+ break;
+ case 2:
+ if(include_carrier_number)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND, Carrier: %d",
+ pinfo->srcport, pinfo->destport, carriernumber);
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND",
+ pinfo->srcport, pinfo->destport);
+ break;
+ case 3:
+ if(include_carrier_number)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d MAC-Timer, Carrier: %d",
+ pinfo->srcport, pinfo->destport, carriernumber);
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d MAC-Timer",
+ pinfo->srcport, pinfo->destport);
+ break;
+ case 127:
+ if(include_carrier_number)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND Done, Carrier: %d",
+ pinfo->srcport, pinfo->destport, carriernumber);
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-IND Done",
+ pinfo->srcport, pinfo->destport);
+ break;
+ case 128:
+ if(include_carrier_number)
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ Done, Carrier: %d",
+ pinfo->srcport, pinfo->destport, carriernumber);
+ else
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d tetra-UNITDATA-REQ Done",
+ pinfo->srcport, pinfo->destport);
+ break;
+ default:
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%d > %d Unkown command: %d",
+ pinfo->srcport, pinfo->destport, type);
+ break;
+ }
+ }
+
+ if (tree) { /* we are being asked for details */
+ guint32 offset = 0;
+ guint32 txtimer = 0;
+ guint32 tslot = 0;
+
+ tetra_item = proto_tree_add_item(tree, proto_tetra, tvb, 0, -1, FALSE);
+ tetra_tree = proto_item_add_subtree(tetra_item, ett_tetra);
+ tetra_header_tree = proto_item_add_subtree(tetra_item, ett_tetra);
+
+ offset ++;
+
+ // Carrier number
+ if(include_carrier_number)
+ {
+ tetra_sub_item = proto_tree_add_uint(tetra_tree, hf_tetra_carriernumber, tvb, offset, 1, carriernumber);
+ offset ++;
+ }
+
+ // Registers
+ tetra_sub_item = proto_tree_add_item( tetra_tree, hf_tetra_header, tvb, offset, -1, FALSE );
+ tetra_header_tree = proto_item_add_subtree(tetra_sub_item, ett_tetra);
+
+ // Timer
+ tvb_memcpy(tvb, (guint8 *)&txtimer, offset, 4);
+ tetra_sub_item = proto_tree_add_item(tetra_header_tree, hf_tetra_timer, tvb, offset, 4, TRUE);
+ tslot = ((txtimer & 0x7800) >> 11);
+ if(tslot==4)
+ tslot = 3;
+ if(tslot==8)
+ tslot = 4;
+ proto_item_append_text(tetra_sub_item, " (Multiple frame: %d, Frame: %d, Slot: %d)",
+ txtimer & 0x3F, (txtimer & 0x7c0) >> 6,
+ tslot);
+
+ offset += 4;
+
+ switch(type)
+ {
+ case 1: // tetra-UNITDATA-REQ
+ case 128: // tetra-UNITDATA-REQ Done
+ dissect_tetra_UNITDATA_REQ(tvb, pinfo, tetra_header_tree, offset, 1);
+ break;
+ case 2: // tetra-UNITDATA-IND
+ case 127: // tetra-UNITDATA-IND Done
+ dissect_tetra_UNITDATA_IND(tvb, pinfo, tetra_header_tree, offset);
+ break;
+ case 3: // MAC-Timer
+ break;
+ default:
+ break;
+ }
+ }
+}
diff --git a/asn1/tetra/packet-tetra-template.h b/asn1/tetra/packet-tetra-template.h
new file mode 100644
index 0000000000..9298d346b0
--- /dev/null
+++ b/asn1/tetra/packet-tetra-template.h
@@ -0,0 +1,33 @@
+/* packet-AzPort.h
+ * Routines for TETRA packet dissection
+ *
+ * Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
+ * Beijing Institute of Technology, China
+ *
+ * $Id$
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 1998 Gerald Combs
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#ifndef PACKET_TETRA_H
+#define PACKET_TETRA_H
+
+#include "packet-tetra-exp.h"
+
+#endif /* PACKET_TETRA_H */
diff --git a/asn1/tetra/tetra.asn b/asn1/tetra/tetra.asn
new file mode 100644
index 0000000000..995491dab7
--- /dev/null
+++ b/asn1/tetra/tetra.asn
@@ -0,0 +1,2328 @@
+-- TETRA packet dissection
+-- Copyright (c) 2007 - 2011 Professional Mobile Communication Research Group,
+-- Beijing Institute of Technology, China
+--
+
+UMAC-MODULE DEFINITIONS AUTOMATIC TAGS ::=
+BEGIN
+
+AACH ::= SEQUENCE
+{
+ function INTEGER(0..3),
+ field1 INTEGER(0..63),
+ field2 INTEGER(0..63)
+}
+
+BSCH ::= SEQUENCE
+{
+ system-code System-Code,
+ colour-code Colour-Code,
+ timeslot-number Timeslot-Number,
+ frame-number Frame-Number,
+ multiple-frame-number Multiple-Frame-Number,
+ sharing-mod Sharing-Mod,
+ ts-reserved-frames TS-Reserved-Frames,
+ u-plane-dtx U-Plane-DTX,
+ frame-18-extension Frame-18-Extension,
+ reserved Reserved ,
+ tm-sud INTEGER(0..536870911),
+ mcc INTEGER(0..1023),
+ mnc INTEGER(0..16383),
+ neighbour-cell-broadcast INTEGER(0..3),
+ cell-service-level INTEGER(0..3),
+ late-entry-information INTEGER(0..1)
+}
+ System-Code ::= ENUMERATED
+ {
+ ets-300-392-2(0),
+ ets-300-392-2anden-300-392-7(1),
+ en-300-392-2-v2-3-2orlateranden-300-392-7(2),
+ v-d-reserved(3),
+ v-d-reserved(4),
+ v-d-reserved(5),
+ v-d-reserved(6),
+ v-d-reserved(7),
+ reserved(8),
+ reserved(9),
+ direct-mode-operation(10),
+ direct-mode-operation(11),
+ direct-mode-operation(12),
+ direct-mode-operation(13),
+ direct-mode-operation(14),
+ direct-mode-operation(15)
+ }
+ Colour-Code ::= ENUMERATED
+ {
+ pre-defined(0),
+ operator-defined(1),
+ operator-defined(2),
+ operator-defined(3),
+ operator-defined(4),
+ operator-defined(5),
+ operator-defined(6),
+ operator-defined(7),
+ operator-defined(8),
+ operator-defined(9),
+ operator-defined(10),
+ operator-defined(11),
+ operator-defined(12),
+ operator-defined(13),
+ operator-defined(14),
+ operator-defined(15),
+ operator-defined(16),
+ operator-defined(17),
+ operator-defined(18),
+ operator-defined(19),
+ operator-defined(20),
+ operator-defined(21),
+ operator-defined(22),
+ operator-defined(23),
+ operator-defined(24),
+ operator-defined(25),
+ operator-defined(26),
+ operator-defined(27),
+ operator-defined(28),
+ operator-defined(29),
+ operator-defined(30),
+ operator-defined(31),
+ operator-defined(32),
+ operator-defined(33),
+ operator-defined(34),
+ operator-defined(35),
+ operator-defined(36),
+ operator-defined(37),
+ operator-defined(38),
+ operator-defined(39),
+ operator-defined(40),
+ operator-defined(41),
+ operator-defined(42),
+ operator-defined(43),
+ operator-defined(44),
+ operator-defined(45),
+ operator-defined(46),
+ operator-defined(47),
+ operator-defined(48),
+ operator-defined(49),
+ operator-defined(50),
+ operator-defined(51),
+ operator-defined(52),
+ operator-defined(53),
+ operator-defined(54),
+ operator-defined(55),
+ operator-defined(56),
+ operator-defined(57),
+ operator-defined(58),
+ operator-defined(59),
+ operator-defined(60),
+ operator-defined(61),
+ operator-defined(62),
+ operator-defined(63)
+ }
+ Timeslot-Number ::= ENUMERATED
+ {
+ timeslot-1(0),
+ timeslot-2(1),
+ timeslot-3(2),
+ timeslot-4(3)
+ }
+ Frame-Number ::= ENUMERATED
+ {
+ reserved(0),
+ frame-1(1),
+ frame-2(2),
+ frame-3(3),
+ frame-4(4),
+ frame-5(5),
+ frame-6(6),
+ frame-7(7),
+ frame-8(8),
+ frame-9(9),
+ frame-10(10),
+ frame-11(11),
+ frame-12(12),
+ frame-13(13),
+ frame-14(14),
+ frame-15(15),
+ frame-16(16),
+ frame-17(17),
+ frame-18(18),
+ reserved(19),
+ reserved(20),
+ reserved(21),
+ reserved(22),
+ reserved(23),
+ reserved(24),
+ reserved(25),
+ reserved(26),
+ reserved(27),
+ reserved(28),
+ reserved(29),
+ reserved(30),
+ reserved(31)
+ }
+ Multiple-Frame-Number ::= ENUMERATED
+ {
+ reserved(0),
+ multiframe-1(1),
+ multiframe-2(2),
+ multiframe-3(3),
+ multiframe-4(4),
+ multiframe-5(5),
+ multiframe-6(6),
+ multiframe-7(7),
+ multiframe-8(8),
+ multiframe-9(9),
+ multiframe-10(10),
+ multiframe-11(11),
+ multiframe-12(12),
+ multiframe-13(13),
+ multiframe-14(14),
+ multiframe-15(15),
+ multiframe-16(16),
+ multiframe-17(17),
+ multiframe-18(18),
+ multiframe-19(19),
+ multiframe-20(20),
+ multiframe-21(21),
+ multiframe-22(22),
+ multiframe-23(23),
+ multiframe-24(24),
+ multiframe-25(25),
+ multiframe-26(26),
+ multiframe-27(27),
+ multiframe-28(28),
+ multiframe-29(29),
+ multiframe-30(30),
+ multiframe-31(31),
+ multiframe-32(32),
+ multiframe-33(33),
+ multiframe-34(34),
+ multiframe-35(35),
+ multiframe-36(36),
+ multiframe-37(37),
+ multiframe-38(38),
+ multiframe-39(39),
+ multiframe-40(40),
+ multiframe-41(41),
+ multiframe-42(42),
+ multiframe-43(43),
+ multiframe-44(44),
+ multiframe-45(45),
+ multiframe-46(46),
+ multiframe-47(47),
+ multiframe-48(48),
+ multiframe-49(49),
+ multiframe-50(50),
+ multiframe-51(51),
+ multiframe-52(52),
+ multiframe-53(53),
+ multiframe-54(54),
+ multiframe-55(55),
+ multiframe-56(56),
+ multiframe-57(57),
+ multiframe-58(58),
+ multiframe-59(59),
+ multiframe-60(60),
+ reserved(61),
+ reserved(62),
+ reserved(63)
+ }
+ Sharing-Mod ::= ENUMERATED
+ {
+ continuous-transmission(0),
+ carrier-sharing(1),
+ mcch-sharing(2),
+ traffic-carrier-sharing(3)
+ }
+ TS-Reserved-Frames ::= ENUMERATED
+ {
+ frame-reserved-1(0),
+ frames-reserved-2(1),
+ frames-reserved-3(2),
+ frames-reserved-4(3),
+ frames-reserved-6(4),
+ frames-reserved-9(5),
+ frames-reserved-12(6),
+ frames-reserved-18(7)
+ }
+ U-Plane-DTX ::= ENUMERATED
+ {
+ not-allowed(0),
+ allowed(1)
+ }
+ Frame-18-Extension ::= ENUMERATED
+ {
+ not-allowed(0),
+ allowed(1)
+ }
+ Reserved ::= ENUMERATED
+ {
+ default(0),
+ not-used(1)
+ }
+
+
+BNCH ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ broadcast-type INTEGER(0..3),
+ main-carrier INTEGER(0..4095),
+ frequency-band INTEGER(0..15),
+ offset Offset,
+ duplex-spacing INTEGER(0..7),
+ reverse-operation Reverse-Operation,
+ sencond-ctl-carrier Sencond-Ctl-Carrier,
+ ms-txpwr-max-cell MS-TXPWR-MAX-CELL,
+ rxlev-access-min RXLEV-ACCESS-MIN ,
+ access-parameter ACCESS-PARAMETER,
+ radio-downlink-timeout RADIO-DOWNLINK-TIMEOUT,
+ hyperframe-or-cck CHOICE
+ {
+ hyperframe INTEGER(0..65535),
+ cckid INTEGER(0..65535)
+ },
+ optional-params CHOICE
+ {
+ even-multiframe TS-COMMON-FRAMES,
+ odd-multiframe TS-COMMON-FRAMES,
+ access-a-code Default-Code-A,
+ extend-service Extended-Services-Broadcast
+ },
+ la INTEGER(0..16383),
+ subscriber-class INTEGER(0..65535),
+ registriation INTEGER(0..1),
+ de-registration INTEGER(0..1),
+ priority-cell INTEGER(0..1),
+ minimum-mode-service INTEGER(0..1),
+ migration INTEGER(0..1),
+ system-wide-service INTEGER(0..1),
+ tetra-voice-service INTEGER(0..1),
+ circuit-mode-data-service INTEGER(0..1),
+ reserved INTEGER(0..1),
+ sndcp-service INTEGER(0..1),
+ air-interface-encryption INTEGER(0..1),
+ advanced-link-support INTEGER(0..1)
+}
+ Offset ::= ENUMERATED
+ {
+ offset-0(0),
+ offset-positive-6-point-25(1),
+ offset-minus-6-point-25(2),
+ offset-12-point-5(3)
+ }
+
+ Reverse-Operation ::= ENUMERATED
+ {
+ normal(0),
+ reverse(1)
+ }
+ Sencond-Ctl-Carrier ::= ENUMERATED
+ {
+ none(0),
+ timeslot-2(1),
+ timeslots-2and3(2),
+ timeslots-2and3and4(3)
+ }
+ MS-TXPWR-MAX-CELL ::= ENUMERATED
+ {
+ reserved(0),
+ dbm-15(1),
+ dbm-20(2),
+ dbm-25(3),
+ dbm-30(4),
+ dbm-35(5),
+ dbm-40(6),
+ dbm-45(7)
+ }
+ RXLEV-ACCESS-MIN ::= ENUMERATED
+ {
+ dbm-125(0),
+ dbm-120(1),
+ dbm-115(2),
+ dbm-110(3),
+ dbm-105(4),
+ dbm-100(5),
+ dbm-95(6),
+ dnm-90(7),
+ dbm-85(8),
+ dbm-80(9),
+ dbm-75(10),
+ dbm-70(11),
+ dbm-65(12),
+ dbm-60(13),
+ dbm-55(14),
+ dbm-50(15)
+ }
+ ACCESS-PARAMETER ::= ENUMERATED
+ {
+ dbm-53(0),
+ dbm-51(1),
+ dbm-49(2),
+ dbm-47(3),
+ dbm-45(4),
+ dbm-43(5),
+ dbm-41(6),
+ dbm-39(7),
+ dbm-37(8),
+ dbm-35(9),
+ dbm-33(10),
+ dbm-31(11),
+ dbm-29(12),
+ dbm-27(13),
+ dbm-25(14),
+ dbm-23(15)
+ }
+ RADIO-DOWNLINK-TIMEOUT ::= ENUMERATED
+ {
+ disable(0),
+ timeslots-144(1),
+ timeslots-288(2),
+ timeslots-432(3),
+ timeslots-576(4),
+ timeslots-720(5),
+ timeslots-864(6),
+ timeslots-1008(7),
+ timeslots-1152(8),
+ timeslots-1296(9),
+ timeslots-1440(10),
+ timeslots-1584(11),
+ timeslots-1728(12),
+ timeslots-1872(13),
+ timeslots-2016(14),
+ timeslots-2160(15)
+ }
+ TS-COMMON-FRAMES ::= SEQUENCE
+ {
+ frame1 FRAME,
+ frame2 FRAME,
+ frame3 FRAME,
+ frame4 FRAME,
+ frame5 FRAME,
+ frame6 FRAME,
+ frame7 FRAME,
+ frame8 FRAME,
+ frame9 FRAME,
+ frame10 FRAME,
+ frame11 FRAME,
+ frame12 FRAME,
+ frame13 FRAME,
+ frame14 FRAME,
+ frame15 FRAME,
+ frame16 FRAME,
+ frame17 FRAME,
+ frame18 FRAME
+ }
+ FRAME ::= ENUMERATED
+ {
+ not-common(0),
+ common(1)
+ }
+ Default-Code-A ::= SEQUENCE
+ {
+ imm IMM,
+ wt WT,
+ nu NU,
+ frame-len-factor Frame-Len-Factor,
+ timeslot-pointer Timeslot-Pointer,
+ min-pdu-priority Min-Pdu-Priority
+ }
+ IMM ::= ENUMERATED
+ {
+ always-randomize(0),
+ randomize-after-imm-tdma(1),
+ randomize-after-imm-tdma(2),
+ randomize-after-imm-tdma(3),
+ randomize-after-imm-tdma(4),
+ randomize-after-imm-tdma(5),
+ randomize-after-imm-tdma(6),
+ randomize-after-imm-tdma(7),
+ randomize-after-imm-tdma(8),
+ randomize-after-imm-tdma(9),
+ randomize-after-imm-tdma(10),
+ randomize-after-imm-tdma(11),
+ randomize-after-imm-tdma(12),
+ randomize-after-imm-tdma(13),
+ randomize-after-imm-tdma(14),
+ immediate-access-allowed(15)
+ }
+ WT ::= ENUMERATED
+ {
+ reserved(0),
+ response-within-wt-downlink(1),
+ response-within-wt-downlink(2),
+ response-within-wt-downlink(3),
+ response-within-wt-downlink(4),
+ response-within-wt-downlink(5),
+ response-within-wt-downlink(6),
+ response-within-wt-downlink(7),
+ response-within-wt-downlink(8),
+ response-within-wt-downlink(9),
+ response-within-wt-downlink(10),
+ response-within-wt-downlink(11),
+ response-within-wt-downlink(12),
+ response-within-wt-downlink(13),
+ response-within-wt-downlink(14),
+ response-within-wt-downlink(15)
+ }
+ NU ::= ENUMERATED
+ {
+ no-random(0),
+ random-1(1),
+ random-2(2),
+ random-3(3),
+ random-4(4),
+ random-5(5),
+ random-6(6),
+ random-7(7),
+ random-8(8),
+ random-9(9),
+ random-10(10),
+ random-11(11),
+ random-12(12),
+ random-13(13),
+ random-14(14),
+ random-15(15)
+ }
+ Frame-Len-Factor ::= ENUMERATED
+ {
+ multiply-1(0),
+ multiply-4(1)
+ }
+ Timeslot-Pointer ::= ENUMERATED
+ {
+ same-as-downlink(0),
+ timeslot-4(1),
+ timeslot-bit-map(2),
+ timeslot-bit-map(3),
+ timeslot-bit-map(4),
+ timeslot-bit-map(5),
+ timeslot-bit-map(6),
+ timeslot-bit-map(7),
+ timeslot-bit-map(8),
+ timeslot-bit-map(9),
+ timeslot-bit-map(10),
+ timeslot-bit-map(11),
+ timeslot-bit-map(12),
+ timeslot-bit-map(13),
+ timeslot-bit-map(14),
+ all-four-timeslots(15)
+ }
+ Min-Pdu-Priority ::= ENUMERATED
+ {
+ priority-0(0),
+ priority-1(1),
+ priority-2(2),
+ priority-3(3),
+ priority-4(4),
+ priority-5(5),
+ priority-6(6),
+ priority-7(7)
+ }
+ Extended-Services-Broadcast ::= SEQUENCE
+ {
+ security-information INTEGER(0..255),
+ sds-tl-addressing-method SDS-TL-Addressing-Method,
+ gck-supported INTEGER(0..1),
+ section CHOICE
+ {
+ present-1 PRESENT1,
+ present-2 INTEGER(0..127),
+ present-3 INTEGER(0..127),
+ present-4 INTEGER(0..127)
+ }
+ }
+ SDS-TL-Addressing-Method ::= ENUMERATED
+ {
+ reserved(0),
+ service-centre(1),
+ never-use-service-centre(2),
+ ms-choice-to-use-service-centre(3)
+ }
+ PRESENT1 ::=SEQUENCE
+ {
+ data-priority-supported Data-Priority-Supported,
+ reserved INTEGER(0..7),
+ section-2-information Section-Information,
+ section-3-information Section-Information,
+ section-4-information Section-Information
+ }
+ Data-Priority-Supported ::=ENUMERATED
+ {
+ not-supported(0),
+ supported(1)
+ }
+ Section-Information ::=ENUMERATED
+ {
+ no-information(0),
+ futher-information(1)
+ }
+
+
+
+
+MAC-ACCESS ::= SEQUENCE
+{
+ pdu-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ encrypted-flag Encrypted-Flag,
+ address Address,
+ data CHOICE
+ {
+ sdu1 U-LLC-PDU,
+ sdu2 ComplexSDU
+ }
+}
+
+Address ::= CHOICE
+{
+ ssi INTEGER(0..16777215),
+ eventLabel INTEGER(0..1023),
+ ussi INTEGER(0..16777215),
+ smi INTEGER(0..16777215)
+}
+U-LLC-PDU ::= CHOICE
+{
+ bl-adata U-BL-ADATA,
+ bl-data U-BL-DATA,
+ bl-udata U-MLE-PDU,
+ bl-ack U-BL-ACK,
+ bl-adata-fcs U-BL-ADATA-FCS,
+ bl-data-fcs U-BL-DATA-FCS,
+ bl-udata-fcs U-MLE-PDU-FCS,
+ bl-ack-fcs U-BL-ACK-FCS,
+ al-setup NULL,
+ al-data NULL,
+ al-udata NULL,
+ al-ack NULL,
+ al-reconnect NULL,
+ reserve1 NULL,
+ reserve2 NULL,
+ al-disc NULL
+}
+ U-BL-ACK-FCS ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ tl-sdu U-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+}
+
+ U-MLE-PDU-FCS ::= SEQUENCE
+ {
+ u-mle-pdu U-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+ U-BL-DATA-FCS ::= SEQUENCE
+ {
+ ns INTEGER(0..1),
+ tl-sdu U-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+U-BL-ADATA-FCS ::= SEQUENCE
+ {
+ nr INTEGER(0..1),
+ ns INTEGER(0..1),
+ tl-sdu U-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+
+U-MLE-PDU ::= CHOICE
+{
+ u-mle-reserved1 NULL,
+ mm U-MM-PDU,
+ cmce U-CMCE-PDU,
+ u-mle-reserved2 NULL,
+ sndcp NULL,
+ mle UMLE-PDU,
+ tetra-management-entity-protocol NULL,
+ u-mle-reserved3 NULL
+}
+ComplexSDU ::= SEQUENCE
+{
+ lengthIndicationOrCapacityRequest CHOICE
+ {
+ lengthIndication LengthIndication,
+ capacityRequest FRAG
+ },
+ tm-sdu U-LLC-PDU
+}
+FRAG ::= SEQUENCE
+{
+ frag Frag1,
+ reservation-requirement SLOT-APPLY
+}
+
+LengthIndication ::= ENUMERATED
+{
+ null(0),
+ reserved-1(1),
+ reserved-2(2),
+ bits-24(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ reserved-13(13),
+ reserved-14(14),
+ reserved-15(15),
+ reserved-16(16),
+ reserved-17(17),
+ reserved-18(18),
+ reserved-19(19),
+ reserved-20(20),
+ reserved-21(21),
+ reserved-22(22),
+ reserved-23(23),
+ reserved-24(24),
+ reserved-25(25),
+ reserved-26(26),
+ reserved-27(27),
+ reserved-28(28),
+ reserved-29(29),
+ reserved-30(30),
+ reserved-31(31)
+}
+SLOT-APPLY ::= ENUMERATED
+{
+ subslot(0),
+ slot-1(1),
+ slot-2(2),
+ slot-3(3),
+ slot-4(4),
+ slot-5(5),
+ slot-6(6),
+ slot-8(7),
+ slot-10(8),
+ slot-13(9),
+ slot-17(10),
+ slot-24(11),
+ slot-34(12),
+ slot-51(13),
+ slot-68(14),
+ more-than-68(15)
+}
+Frag1 ::= ENUMERATED
+{
+ not-fragmented(0),
+ start-of-fragmentation(1)
+}
+
+MAC-DATA ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ fill-bit-indication Fill-Bit-Indication,
+ encrypted-flag Encrypted-Flag,
+ address Address,
+ lengthIndicationOrCapacityRequest CHOICE
+ {
+ lengthIndication LengthIndicationMacData,
+ capacityRequest FRAG6
+ },
+ tm-sdu U-LLC-PDU
+}
+Fill-Bit-Indication ::= ENUMERATED
+ {
+ no-present(0),
+ present(1)
+ }
+Encrypted-Flag ::= ENUMERATED
+ {
+ not-encrypted(0),
+ encrypted(1)
+ }
+LengthIndicationMacData ::= ENUMERATED
+{
+ null(0),
+ reserved-1(1),
+ reserved-2(2),
+ bits-24(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ bits-104(13),
+ bits-112(14),
+ bits-120(15),
+ bits-128(16),
+ bits-136(17),
+ bits-144(18),
+ bits-152(19),
+ bits-160(20),
+ bits-168(21),
+ bits-176(22),
+ bits-184(23),
+ bits-192(24),
+ bits-200(25),
+ bits-208(26),
+ bits-216(27),
+ bits-224(28),
+ bits-232(29),
+ bits-240(30),
+ bits-248(31),
+ bits-256(32),
+ bits-264(33),
+ bits-272(34),
+ reserved-35(35),
+ reserved-36(36),
+ reserved-37(37),
+ reserved-38(38),
+ reserved-39(39),
+ reserved-40(40),
+ reserved-41(41),
+ reserved-42(42),
+ reserved-43(43),
+ reserved-44(44),
+ reserved-45(45),
+ reserved-46(46),
+ reserved-47(47),
+ reserved-48(48),
+ reserved-49(49),
+ reserved-50(50),
+ reserved-51(51),
+ reserved-52(52),
+ reserved-53(53),
+ reserved-54(54),
+ reserved-55(55),
+ reserved-56(56),
+ reserved-57(57),
+ reserved-58(58),
+ reserved-59(59),
+ reserved-60(60),
+ reserved-61(61),
+ second-halfslot-stolen(62),
+ start-frag(63)
+}
+
+FRAG6 ::= SEQUENCE
+{
+ frag Frag1,
+ reservation-requirement SLOT-APPLY,
+ reserved INTEGER(0..1)
+}
+
+MAC-FRAG ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ sub-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ tm-sdu BIT STRING(SIZE(264))
+}
+
+MAC-FRAG120 ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ sub-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ tm-sdu BIT STRING(SIZE(120))
+}
+
+MAC-END-UPLINK ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ sub-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ lengthInd-ReservationReq LengthIndOrReservationReq,
+ tm-sdu BIT STRING(SIZE(258))
+}
+
+MAC-END-UP114 ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ pdu-subtype INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ lengthInd-ReservationReq LengthIndOrReservationReq,
+ tm-sdu BIT STRING(SIZE(114))
+}
+
+LengthIndOrReservationReq ::= ENUMERATED
+{
+ reserved-0(0),
+ reserved-1(1),
+ bits-16(2),
+ bits-24(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ bits-104(13),
+ bits-112(14),
+ bits-120(15),
+ bits-128(16),
+ bits-136(17),
+ bits-144(18),
+ bits-152(19),
+ bits-160(20),
+ bits-168(21),
+ bits-176(22),
+ bits-184(23),
+ bits-192(24),
+ bits-200(25),
+ bits-208(26),
+ bits-216(27),
+ bits-224(28),
+ bits-232(29),
+ bits-240(30),
+ bits-248(31),
+ bits-256(32),
+ bits-264(33),
+ bits-272(34),
+ reserved-35(35),
+ reserved-36(36),
+ reserved-37(37),
+ reserved-38(38),
+ reserved-39(39),
+ reserved-40(40),
+ reserved-41(41),
+ reserved-42(42),
+ reserved-43(43),
+ reserved-44(44),
+ reserved-45(45),
+ reserved-46(46),
+ reserved-47(47),
+ subslot(48),
+ slot-1(49),
+ slot-2(50),
+ slot-3(51),
+ slot-4(52),
+ slot-5(53),
+ slot-6(54),
+ slot-8(55),
+ slot-10(56),
+ slot-13(57),
+ slot-17(58),
+ slot-24(59),
+ slot-34(60),
+ slot-51(61),
+ slot-68(62),
+ more-than-68(63)
+}
+
+MAC-END-HU ::= SEQUENCE
+{
+ pdu-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ lengthInd-ReservationReq CHOICE
+ {
+ lengthInd LengthIndMacHu,
+ reservation-requirement SLOT-APPLY
+ },
+ tm-sdu BIT STRING(SIZE(85))
+}
+LengthIndMacHu ::= ENUMERATED
+{
+ reserved-0(0),
+ bits-8(1),
+ bits-16(2),
+ bits-24(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ reserved-13(13),
+ reserved-14(14),
+ reserved-15(15)
+}
+
+MAC-END-DOWNLINK ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ sub-type INTEGER(0..1),
+ fill-bit-indication Fill-Bit-Indication,
+ position-of-grant Position-Of-Grant,
+ lengthIndication LengthIndicationMacEndDl,
+ slot-granting CHOICE
+ {
+ none NULL,
+ slot-granting-param SlotGranting
+ },
+ channel-allocation CHOICE
+ {
+ none NULL,
+ channel-allocation-element ChannelAllocation
+ },
+ tm-sdu BIT STRING(SIZE(255))
+}
+
+SlotGranting ::= SEQUENCE
+{
+ capacity-allocation Capacity-Allocation,
+ granting-delay Granting-delay
+ }
+
+
+ Capacity-Allocation ::= ENUMERATED
+ {
+ first-subslot(0),
+ slot-allocated-1(1),
+ slot-allocated-2(2),
+ slot-allocated-3(3),
+ slot-allocated-4(4),
+ slot-allocated-5(5),
+ slot-allocated-6(6),
+ slot-allocated-8(7),
+ slot-allocated-10(8),
+ slot-allocated-13(9),
+ slot-allocated-17(10),
+ slot-allocated-24(11),
+ slot-allocated-34(12),
+ lot-allocated-51(13),
+ slot-allocated-68(14),
+ second-subslot(15)
+ }
+Granting-delay ::= ENUMERATED
+ {
+ capacity-allocation-at-next-opportunity(0),
+ number-of-opportunities-delay(1),
+ number-of-opportunities-delay(2),
+ number-of-opportunities-delay(3),
+ number-of-opportunities-delay(4),
+ number-of-opportunities-delay(5),
+ number-of-opportunities-delay(6),
+ number-of-opportunities-delay(7),
+ number-of-opportunities-delay(8),
+ number-of-opportunities-delay(9),
+ number-of-opportunities-delay(10),
+ number-of-opportunities-delay(11),
+ number-of-opportunities-delay(12),
+ number-of-opportunities-delay(13),
+ allocation-starts-at-frame-18(14),
+ wait(15)
+ }
+
+
+ChannelAllocation ::= SEQUENCE
+{
+ allocation-type ENUMERATED {replace(0), add(1), quit(2), reserved(3)},
+ timeslot-assigned Timeslot-Assigned,
+ up-down-assigned ENUMERATED {reserve(0), downlink-only(1), uplink-only(2), uplink-downlink(3)},
+ clch-permission CLCH-permission,
+ cell-change Cell-change-flag,
+ carrier-number INTEGER(0..4095),
+ extend-carrier-flag CHOICE{none NULL,extended Extended-carrier-flag} ,
+ monitoring-pattern CHOICE{one Monitoring-pattern,none1 NULL,none2 NULL,none3 NULL}
+}
+Timeslot-Assigned ::= ENUMERATED
+{
+ go-to-control-channel(0),
+ timeslot-4(1),
+ timeslot-bit-map(2),
+ timeslot-bit-map(3),
+ timeslot-bit-map(4),
+ timeslot-bit-map(5),
+ timeslot-bit-map(6),
+ timeslot-bit-map(7),
+ timeslot-bit-map(8),
+ timeslot-bit-map(9),
+ timeslot-bit-map(10),
+ timeslot-bit-map(11),
+ timeslot-bit-map(12),
+ timeslot-bit-map(13),
+ timeslot-bit-map(14),
+ all-four-timeslots(15)
+}
+CLCH-permission ::= ENUMERATED
+ {
+ no-permission(0),
+ permission(1)
+ }
+ Cell-change-flag ::= ENUMERATED
+ {
+ no-change(0),
+ change(1)
+ }
+ Extended-carrier-flag ::= SEQUENCE
+ {
+ frequency-band INTEGER(0..15),
+ offset INTEGER(0..3),
+ duplex-spacing INTEGER(0..7),
+ reverse-operation ENUMERATED{normal(0),reverse(1)}
+ }
+ Monitoring-pattern ::= ENUMERATED
+ {
+ no(0),
+ one(1),
+ two(2),
+ three(3)
+ }
+
+
+
+MAC-END-DOWN111 ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ fill-bit-ind BOOLEAN,
+ position-of-grant INTEGER(0..1),
+ lengthIndication LengthIndicationMacEndDl,
+ slot-granting CHOICE
+ {
+ none NULL,
+ slot-granting-param SlotGranting
+ },
+ channel-allocation CHOICE
+ {
+ none NULL,
+ channel-allocation-element ChannelAllocation
+ },
+ tm-sdu BIT STRING(SIZE(111))
+}
+LengthIndicationMacEndDl ::= ENUMERATED
+{
+ reserved-0(0),
+ reserved-1(1),
+ bits-16(2),
+ bits-24(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ bits-104(13),
+ bits-112(14),
+ bits-120(15),
+ bits-128(16),
+ bits-136(17),
+ bits-144(18),
+ bits-152(19),
+ bits-160(20),
+ bits-168(21),
+ bits-176(22),
+ bits-184(23),
+ bits-192(24),
+ bits-200(25),
+ bits-208(26),
+ bits-216(27),
+ bits-224(28),
+ bits-232(29),
+ bits-240(30),
+ bits-248(31),
+ bits-256(32),
+ bits-264(33),
+ bits-272(34),
+ reserved-35(35),
+ reserved-36(36),
+ reserved-37(37),
+ reserved-38(38),
+ reserved-39(39),
+ reserved-40(40),
+ reserved-41(41),
+ reserved-42(42),
+ reserved-43(43),
+ reserved-44(44),
+ reserved-45(45),
+ reserved-46(46),
+ reserved-47(47),
+ reserved-48(48),
+ reserved-49(49),
+ reserved-50(50),
+ reserved-51(51),
+ reserved-52(52),
+ reserved-53(53),
+ reserved-54(54),
+ reserved-55(55),
+ reserved-56(56),
+ reserved-57(57),
+ reserved-58(58),
+ reserved-59(59),
+ reserved-60(60),
+ reserved-61(61),
+ reserved-62(62),
+ reserved-63(63)
+}
+
+MAC-RESOURCE ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ fill-bit-indication Fill-Bit-Indication,
+ position-of-grant Position-Of-Grant,
+ encryption-mode INTEGER(0..3),
+ access-ack ENUMERATED{undefined(0),random-access-acknowledged(1)},
+ lengthIndication LengthIndicationMacResource,
+ address AddressMacResource
+}
+OTHER-DATA ::= SEQUENCE
+{
+ power-control CHOICE
+ {
+ none NULL,
+ powerParameters PowerControl
+ },
+ slot-granting CHOICE
+ {
+ none NULL,
+ slot-granting-param SlotGranting
+ },
+ channel-allocation CHOICE
+ {
+ none NULL,
+ channel-allocation-element ChannelAllocation
+ },
+ tm-sdu D-LLC-PDU
+}
+
+
+Position-Of-Grant ::= ENUMERATED
+ {
+ on-current(0),
+ on-allocated(1)
+ }
+AddressMacResource ::= CHOICE
+{
+ null-pdu NULL,
+ ssi SSI-NEED,
+ eventLabel EVENT-NEED,
+ ussi USSI-NEED,
+ smi SMI-NEED,
+ ssi-eventLabel SSI-EVENT-NEED,
+ ssi-usage-maker SSI-USAGE-NEED,
+ smi-eventLabel SMI-EVENT-NEED
+}
+SSI-NEED ::= SEQUENCE
+{
+ ssi INTEGER(0..16777215),
+ other OTHER-DATA
+}
+EVENT-NEED ::= SEQUENCE
+{
+ eventlabel INTEGER(0..1023),
+ other OTHER-DATA
+}
+USSI-NEED ::= SEQUENCE
+{
+ ussi INTEGER(0..16777215),
+ other OTHER-DATA
+}
+
+SMI-NEED ::= SEQUENCE
+{
+ smi INTEGER(0..16777215),
+ other OTHER-DATA
+}
+SSI-EVENT-NEED ::= SEQUENCE
+{
+ ssi INTEGER(0..16777215),
+ ventlabel INTEGER(0..1023),
+ other OTHER-DATA
+}
+SSI-USAGE-NEED ::= SEQUENCE
+{
+ ssi INTEGER(0..16777215),
+ usage-maker INTEGER(0..63),
+ other OTHER-DATA
+}
+SMI-EVENT-NEED ::= SEQUENCE
+{
+ smi-eventlabel BIT STRING(SIZE(34)),
+ other OTHER-DATA
+}
+
+
+LengthIndicationMacResource ::= ENUMERATED
+{
+ reserved-0(0),
+ reserved-1(1),
+ null-pdu(2),
+ reserved(3),
+ bits-32(4),
+ bits-40(5),
+ bits-48(6),
+ bits-56(7),
+ bits-64(8),
+ bits-72(9),
+ bits-80(10),
+ bits-88(11),
+ bits-96(12),
+ bits-104(13),
+ bits-112(14),
+ bits-120(15),
+ bits-128(16),
+ bits-136(17),
+ bits-144(18),
+ bits-152(19),
+ bits-160(20),
+ bits-168(21),
+ bits-176(22),
+ bits-184(23),
+ bits-192(24),
+ bits-200(25),
+ bits-208(26),
+ bits-216(27),
+ bits-224(28),
+ bits-232(29),
+ bits-240(30),
+ bits-248(31),
+ bits-256(32),
+ bits-264(33),
+ bits-272(34),
+ reserved-35(35),
+ reserved-36(36),
+ reserved-37(37),
+ reserved-38(38),
+ reserved-39(39),
+ reserved-40(40),
+ reserved-41(41),
+ reserved-42(42),
+ reserved-43(43),
+ reserved-44(44),
+ reserved-45(45),
+ reserved-46(46),
+ reserved-47(47),
+ reserved-48(48),
+ reserved-49(49),
+ reserved-50(50),
+ reserved-51(51),
+ reserved-52(52),
+ reserved-53(53),
+ reserved-54(54),
+ reserved-55(55),
+ reserved-56(56),
+ reserved-57(57),
+ reserved-58(58),
+ reserved-59(59),
+ reserved-60(60),
+ reserved-61(61),
+ second-halfslot-stolen(62),
+ start-frag(63)
+}
+
+ PowerControl ::= ENUMERATED
+ {
+ no-change(0),
+ increase-1(1),
+ increase-2(2),
+ increase-3(3),
+ increase-4(4),
+ increase-5(5),
+ increase-6(6),
+ maximum-xceeded(7),
+ revert-open-loop-control(8),
+ decrease-1(9),
+ decrease-2(10),
+ decrease-3(11),
+ decrease-4(12),
+ decrease-5(13),
+ decrease-6(14),
+ radio-uplink-failure(15)
+ }
+
+
+ExtendCarrier ::= SEQUENCE
+{
+ freq-band INTEGER(0..15),
+ offset INTEGER(0..3),
+ duplex-spacing INTEGER(0..7),
+ reverse-operation BOOLEAN
+}
+
+MAC-ACCESS-DEFINE ::= SEQUENCE
+{
+ pdu-type INTEGER(0..3),
+ broadcast-type INTEGER(0..3),
+ broadcast-channel INTEGER(0..1),
+ access-code INTEGER(0..3),
+ imm INTEGER(0..15),
+ wt INTEGER(0..15),
+ nu INTEGER(0..15),
+ frame-len-factor INTEGER(0..1),
+ timeslot-pointer INTEGER(0..15),
+ min-priority INTEGER(0..7),
+ optional-field CHOICE
+{
+ none NULL,
+ class-bitmap INTEGER(0..65535),
+ gssi INTEGER(0..33554431),
+ reserved NULL
+ },
+ filler-bits INTEGER(0..7)
+}
+
+D-LLC-PDU ::= CHOICE
+{
+ bl-adata D-BL-ADATA,
+ bl-data D-BL-DATA,
+ bl-udata D-MLE-PDU,
+ bl-ack D-BL-ACK,
+ bl-adata-fcs D-BL-ADATA-FCS,
+ bl-data-fcs D-BL-DATA-FCS,
+ bl-udata-fcs D-MLE-PDU-FCS,
+ bl-ack-fcs D-BL-ACK-FCS,
+ al-setup NULL,
+ al-data NULL,
+ al-udata NULL,
+ al-ack NULL,
+ al-reconnect NULL,
+ reserve1 NULL,
+ reserve2 NULL,
+ al-disc NULL
+}
+
+D-BL-ACK-FCS ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ tl-sdu D-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+}
+
+D-MLE-PDU-FCS ::= SEQUENCE
+ {
+ d-mle-pdu D-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+
+D-BL-ADATA-FCS ::= SEQUENCE
+ {
+ nr INTEGER(0..1),
+ ns INTEGER(0..1),
+ tl-sdu D-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+D-BL-DATA-FCS ::= SEQUENCE
+ {
+ ns INTEGER(0..1),
+ tl-sdu D-MLE-PDU,
+ fcs OCTET STRING(SIZE(4))
+ }
+
+U-BL-ACK ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ tl-sdu U-MLE-PDU
+}
+
+D-BL-ACK ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ tl-sdu D-MLE-PDU
+}
+
+U-BL-DATA ::= SEQUENCE
+{
+ ns INTEGER(0..1),
+ tl-sdu U-MLE-PDU
+}
+
+D-BL-DATA ::= SEQUENCE
+{
+ ns INTEGER(0..1),
+ tl-sdu D-MLE-PDU
+}
+
+U-BL-ADATA ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ ns INTEGER(0..1),
+ tl-sdu U-MLE-PDU
+}
+
+D-BL-ADATA ::= SEQUENCE
+{
+ nr INTEGER(0..1),
+ ns INTEGER(0..1),
+ tl-sdu D-MLE-PDU
+}
+
+D-MLE-PDU ::= CHOICE
+{
+ u-mle-reserved1 NULL,
+ mm D-MM-PDU,
+ cmce D-CMCE-PDU,
+ u-mle-reserved2 NULL,
+ sndcp NULL,
+ mle DMLE-PDU,
+ tetra-management-entity-protocol NULL,
+ u-mle-reserved3 NULL
+}
+
+UMLE-PDU ::= CHOICE
+{
+ u-prepare U-PREPARE,
+ umle-reserved1 NULL,
+ umle-reserved2 NULL,
+ umle-reserved3 NULL,
+ u-restore U-RESTORE,
+ umle-reserved4 NULL,
+ umle-reserved5 NULL,
+ umle-reserved6 NULL
+}
+
+DMLE-PDU ::= CHOICE
+{
+ d-new-cell D-NEW-CELL,
+ d-prepare-fail D-PREPARE-FAIL,
+ d-nwrk-broadcast D-NWRK-BRDADCAST,
+ dmle-reserved1 NULL,
+ d-restore-ack D-RESTORE-ACK,
+ d-restore-fail D-RESTORE-FAIL,
+ dmle-reserved2 NULL,
+ dmle-reserved3 NULL
+}
+
+U-PREPARE ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ optional-elements CHOICE
+ {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ cell-number CHOICE{none NULL, cell-number INTEGER(0..65535)},
+ sdu BIT STRING
+ }
+ }
+}
+
+U-RESTORE ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ mcc CHOICE{none NULL,mcc INTEGER(0..1023)},
+ mnc CHOICE{none NULL,mnc INTEGER(0..16383)},
+ la CHOICE{none NULL,la INTEGER(0..16383)},
+ sdu BIT STRING
+ }
+ }
+}
+
+D-NEW-CELL ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ channel-command-valid INTEGER(0..3),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ sdu BIT STRING
+ }
+}
+
+D-PREPARE-FAIL ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ fail-cause INTEGER(0..3),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ sdu BIT STRING
+ }
+}
+
+D-NWRK-BRDADCAST ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ cell-re-select-parameters INTEGER(0..65535),
+ cell-service-level INTEGER(0..3),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ tetra-network-time CHOICE{none NULL, tetra-network-time TETRA-NETWORK-TIME},
+ number-of-neighbour-cells CHOICE{none NULL, number-of-neighbour-cells INTEGER(0..7)}
+ }
+ }
+}
+
+TETRA-NETWORK-TIME ::= SEQUENCE
+{
+ network-time INTEGER(SIZE(24)),
+ local-time-offset-sign INTEGER(0..1),
+ local-time-offset INTEGER(0..63),
+ year INTEGER(0..63),
+ reserved INTEGER(SIZE(11))
+}
+
+D-RESTORE-ACK ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ sdu BIT STRING
+}
+
+D-RESTORE-FAIL ::= SEQUENCE
+{
+ pdu-type INTEGER(0..7),
+ fail-cause INTEGER(0..3)
+}
+
+U-MM-PDU ::= CHOICE
+{
+ u-Authentication NULL,
+ u-Itsi-Detach NULL,
+ u-Location-Update-Demand U-LOCATION-UPDATE-DEMAND,
+ u-MM-Status U-MM-STATUS,
+ u-MM-reserved1 NULL,
+ u-WK NULL,
+ u-MM-reserved3 NULL,
+ u-Attach-Detach-Group-Identity U-ATTACH-DETACH-GROUP-IDENTITY,
+ u-Attach-Detach-Group-Identity-Ack U-ATTACH-DETACH-GROUP-IDENTITY-ACK,
+ u-TEI-Provide NULL,
+ u-MM-reserved6 NULL,
+ u-Disabled-Status NULL,
+ u-MM-reserved7 NULL,
+ u-MM-reserved8 NULL,
+ u-MM-reserved9 NULL,
+ u-MM-Function-Not-Support NULL
+}
+
+D-MM-PDU ::= CHOICE
+{
+ d-Otar NULL,
+ d-Authentication NULL,
+ d-Authentication-Reject NULL,
+ d-Disable NULL,
+ d-Enable NULL,
+ d-Location-Update-Accept D-LOCATION-UPDATE-ACCEPT,
+ d-Location-Update-Command NULL,
+ d-Location-Update-Reject D-LOCATION-UPDATE-REJECT,
+ d-MM-reserved2 NULL,
+ d-Location-Update-Proceeding NULL,
+ d-Attach-Detach-Group-Identity D-ATTACH-DETACH-GROUP-IDENTITY,
+ d-Attach-Detach-Group-Identity-Ack D-ATTACH-DETACH-GROUP-IDENTITY-ACK,
+ d-MM-Status D-MM-STATUS,
+ d-MM-reserved5 NULL,
+ d-MM-reserved6 NULL,
+ d-MM-Function-Not-Support NULL
+}
+
+UPDATE-TYPE ::= ENUMERATED
+{
+ roaming-location-updating(0),
+ temporary-registration(1),
+ periodic-location-updating(2),
+ itsi-attach(3),
+ call-restoration-roaming(4),
+ migrating-or-call-restoration-migrating(5),
+ demand-location-updating(6),
+ disabled-MS-updating(7)
+}
+
+TYPE3-IDENTIFIER ::= ENUMERATED
+{
+ reserved(0),
+ default-group-attachment-lifetime(1),
+ new-registered-area(2),
+ group-identity-location-demand(3),
+ group-report-response(4),
+ group-identity-location-accept(5),
+ dm-ms-address(6),
+ group-identity-downlink(7),
+ group-identity-uplink(8),
+ authentication-uplink(9),
+ authentication-downlink(10),
+ reserved(11),
+ reserved1(12),
+ reserved2(13),
+ reserved3(14),
+ proprietary(15)
+}
+
+GROUP-IDENTITY-DOWNLINK ::= SEQUENCE
+{
+ attach-detach-identifiet CHOICE{
+ attach SEQUENCE{
+ lifetime INTEGER(0..3),
+ class-of-usage INTEGER(0..7)
+ },
+ detach SEQUENCE{
+ detach-downlike ENUMERATED{
+ unknow-gssi(0),
+ temporary-detachment1(1),
+ temporary-detachment2(2),
+ permanent-detachment(3)
+ }
+ }
+ },
+ address-type CHOICE{
+ gssi OCTET STRING(SIZE(3)),
+ gssi-extension SEQUENCE{ gssi OCTET STRING(SIZE(3)), extension OCTET STRING(SIZE(3))},
+ vgssi OCTET STRING(SIZE(3))
+ }
+}
+
+GROUP-IDENTITY-UPLINK ::= SEQUENCE
+{
+ attach-detach-identifiet CHOICE{
+ attach SEQUENCE{
+ class-of-usage INTEGER(0..7)
+ },
+ detach SEQUENCE{
+ detach-uplike ENUMERATED{
+ unknow-gssi(0),
+ unvaild-cipher(1),
+ user-intitial(2),
+ reseverd(3)
+ }
+ }
+ },
+ address-type CHOICE{
+ gssi OCTET STRING(SIZE(3)),
+ gssi-extension SEQUENCE{ gssi OCTET STRING(SIZE(3)), extension OCTET STRING(SIZE(3))},
+ vgssi OCTET STRING(SIZE(3))
+ }
+}
+
+
+D-LOCATION-UPDATE-ACCEPT ::= SEQUENCE
+{
+ location-update-type UPDATE-TYPE,
+ optional-elements CHOICE
+ {
+ no-type2 NULL,
+ type2-parameters SEQUENCE
+ {
+ ssi CHOICE{none NULL,ssi OCTET STRING(SIZE(3))},
+ address-extension CHOICE{none NULL,address-extension OCTET STRING(SIZE(3))},
+ suscriber-class CHOICE{none NULL,suscriber-class INTEGER(0..32767)},
+ energy-saving-mode CHOICE{none NULL,energy-saving-mode INTEGER(0..7)},
+ scch-info CHOICE{none NULL,scch-info INTEGER(0..16383)},
+ type3 CHOICE{
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {
+ type2-existance BOOLEAN,
+ type3-identifier TYPE3-IDENTIFIER,
+ new-ra CHOICE{none NULL,new-ra INTEGER(0..3)},
+ group-identity-location-accept CHOICE{none NULL,group-identity-location-accept INTEGER(0..3)},
+ group-predefined-lifetime CHOICE{none NULL,group-predefined-lifetime INTEGER(0..3)},
+ group-identity-downlink CHOICE{none NULL,group-identity-downlink INTEGER(0..15)},
+ proprietary CHOICE{none NULL,proprietary INTEGER(0..7) }
+ }
+ }
+ }
+ }
+}
+
+D-LOCATION-UPDATE-REJECT ::= SEQUENCE
+{
+ location-update-type UPDATE-TYPE,
+ reject-cause INTEGER(0..31),
+ cipher-control BOOLEAN
+}
+
+U-MM-STATUS ::= SEQUENCE
+{
+ status-uplink INTEGER(0..63),
+ scanning-on-off ENUMERATED{on(0),off(1)}
+
+}
+
+D-MM-STATUS ::= SEQUENCE
+{
+ status-downlink INTEGER(0..63)
+}
+
+U-CMCE-PDU ::= CHOICE
+{
+ u-Alert U-ALERT,
+ reserved1 NULL,
+ u-Connect U-CONNECT,
+ reserved2 NULL,
+ u-Disconnect U-DISCONNECT,
+ u-Info U-INFO,
+ u-Release U-RELEASE,
+ u-Setup U-SETUP,
+ u-Status U-STATUS,
+ u-Tx-Ceased U-TX-CEASED,
+ u-Tx-Demand U-TX-DEMAND,
+ reserved3 NULL,
+ reserved4 NULL,
+ reserved5 NULL,
+ u-Call-Restore U-CALL-RESTORE,
+ u-SDS-Data U-SDS-DATA,
+ u-Facility NULL
+}
+
+U-RELEASE ::= SEQUENCE
+{
+ call-identifier INTEGER(0..16383),
+ disconnect-cause INTEGER(0..31)
+}
+
+U-SDS-DATA ::= SEQUENCE
+{
+ area-selection INTEGER(0..15),
+ called-party-type-identifier CHOICE{
+ sna INTEGER(0..255),
+ ssi INTEGER(0..16777215),
+ ssi-extension BIT STRING(SIZE(48)),
+ none NULL
+ },
+ short-data-type-identifier CHOICE{
+ data-1 INTEGER(0..65535),
+ data-2 OCTET STRING(SIZE(4)),
+ data-3 BIT STRING(SIZE(64)),
+ length-indicator-data-4 INTEGER(0..4194304)
+ }
+}
+
+U-STATUS ::= SEQUENCE
+{
+ area-selection INTEGER(0..15),
+ called-party-type-identifier CHOICE
+ {
+ short-number-address INTEGER(0..255),
+ ssi INTEGER(0..16777215),
+ called-ssi-called-extension BIT STRING(SIZE(48)),
+ none NULL
+ },
+ pre-coded-status INTEGER(0..65535)
+}
+
+U-INFO ::= SEQUENCE
+{
+ call-id INTEGER(0..16383),
+ poll-response INTEGER(0..1)
+}
+
+D-CMCE-PDU ::= CHOICE
+{
+ d-Alert D-ALERT,
+ d-Call-Proceeding D-CALL-PROCEEDING,
+ d-Connect D-CONNECT,
+ d-Connect-Ack D-CONNECT-ACK,
+ d-Disconnect D-DISCONNECT,
+ d-Info D-INFO,
+ d-Release D-RELEASE,
+ d-Setup D-SETUP,
+ d-Status D-STATUS,
+ d-Tx-Ceased D-TX-CEASED,
+ d-Tx-Continue D-TX-CONTINUE,
+ d-Tx-Granted D-TX-GRANTED,
+ d-Tx-Wait D-TX-WAIT,
+ d-Tx-Interrupt NULL,
+ d-Call-Restore D-CALL-RESTORE,
+ d-SDS-Data D-SDS-DATA,
+ d-Facility NULL
+}
+
+D-SDS-DATA ::= SEQUENCE
+{
+ calling-party-type-identifier CHOICE{
+ none1 NULL,
+ ssi INTEGER(0..16777215),
+ ssi-extension OCTET STRING(SIZE(6)),
+ none2 NULL
+ },
+ short-data-type-identifier CHOICE{
+ data-1 INTEGER(0..65535),
+ data-2 OCTET STRING(SIZE(4)),
+ data-3 OCTET STRING(SIZE(8)),
+ length-indicator-data-4 INTEGER(0..4194304)
+ }
+}
+
+D-STATUS ::= SEQUENCE
+{
+ calling-party-type-identifier CHOICE{
+ none1 NULL,
+ calling-party-address-SSI INTEGER(0..16777215),
+ ssi-extension OCTET STRING(SIZE(6)),
+ none2 NULL
+ },
+ pre-coded-status INTEGER(0..65535)
+}
+
+D-DISCONNECT ::= SEQUENCE
+{
+ call-identifier INTEGER(0..16383),
+ disconnect-cause INTEGER(0..31)
+}
+
+D-INFO ::= SEQUENCE
+{
+ call-identifier INTEGER(0..16383),
+ reset-call-time-out-timer INTEGER(0..1),
+ poll-request INTEGER(0..1)
+}
+
+D-TX-WAIT ::= SEQUENCE
+{
+ call-identifier INTEGER(0..16383),
+ transmission-request-permission INTEGER(0..1)
+}
+D-TX-CONTINUE ::= SEQUENCE
+{
+ call-identifier INTEGER(0..16383),
+ continue INTEGER(0..1),
+ transmission-request-permission INTEGER(0..1)
+}
+
+U-LOCATION-UPDATE-DEMAND ::= SEQUENCE
+{
+ location-update-type UPDATE-TYPE,
+ request-to-append-LA BOOLEAN,
+ cipher-control CHOICE{no-cipher NULL,ciphering-parameters INTEGER(0..1023)},
+ class-of-MS OCTET STRING(SIZE(4)),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE
+ {
+ energy-saving-mode CHOICE{none NULL,energy-saving-mode INTEGER(0..7)},
+ la-information CHOICE{none NULL,la-information INTEGER(0..16383)},
+ ssi CHOICE{none NULL,ssi OCTET STRING(SIZE(3))},
+ address-extension CHOICE{none NULL,address-extension OCTET STRING(SIZE(3))},
+ type3 CHOICE
+ {
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {
+ type3-identifier TYPE3-IDENTIFIER,
+ group-identity-location-demand CHOICE{none NULL,group-identity-location-demand INTEGER(0..3)},
+ group-report-response CHOICE{none NULL,group-report-response BOOLEAN},
+ group-identity-uplink CHOICE{none NULL,group-identity-uplink INTEGER(0..15)},
+ proprietary CHOICE{none NULL,proprietary INTEGER(0..7) }
+ }
+ }
+ }
+ }
+}
+
+U-ATTACH-DETACH-GROUP-IDENTITY ::=SEQUENCE
+{
+ group-identity-report BOOLEAN,
+ group-identity-attach-detach-mode BOOLEAN,
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-element SEQUENCE{
+ type3 CHOICE
+ {
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {
+ type3-identifier TYPE3-IDENTIFIER,
+ length INTEGER(0..2047),
+ repeat-num INTEGER(0..63),
+ group-identity-uplink GROUP-IDENTITY-UPLINK
+ --group-report-response CHOICE{none NULL,group-report-response INTEGER(0..7)},
+ --group-identity-uplink CHOICE{none NULL,group-identity-uplink INTEGER(0..15)},
+ -- proprietary CHOICE{none NULL,proprietary INTEGER(0..7)}
+ }
+ }
+ }
+ }
+}
+
+
+U-ATTACH-DETACH-GROUP-IDENTITY-ACK ::=SEQUENCE
+{
+ group-identity-ack-type BOOLEAN,
+ group-identity-attach-detach-mode BOOLEAN,
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-element SEQUENCE{
+ type3 CHOICE{
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {
+ type3-identifier TYPE3-IDENTIFIER,
+ length INTEGER(0..2047),
+ repeat-num INTEGER(0..63),
+ group-identity-uplink GROUP-IDENTITY-UPLINK
+ --group-identity-uplink CHOICE{none NULL,group-identity-uplink INTEGER(0..15)},
+ -- proprietary CHOICE{none NULL,proprietary INTEGER(0..7) }
+ }
+ }
+ }
+}
+}
+
+U-SETUP ::= SEQUENCE{
+ area-selection INTEGER ( 0..15 ),
+ hook-method-selection BOOLEAN,
+ simple-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ basic-service-information Basic-service-information,
+ request-transmit-send-data INTEGER ( 0..1 ),
+ call-priority INTEGER ( 0..15 ),
+ clir-control INTEGER ( 0..3 ),
+ called-party-address Called-party-address-type,
+ optional-elements CHOICE
+ {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ external-subscriber-number [14] CHOICE { none NULL, external-subscriber-number [14] INTEGER (0..31)},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+Basic-service-information ::= SEQUENCE
+{
+ circuit-mode CIRCUIT,
+ encryption INTEGER(0..1),
+ communication INTEGER(0..3),
+ slots-or-speech INTEGER(0..3)
+ }
+CIRCUIT ::= ENUMERATED {
+ speech-tch-s(0),
+ unprotected-tch-7-2(1),
+ low-protection-tch-4-8(2),
+ low-protection-tch-4-8(3),
+ low-protection-tch-4-8(4),
+ high-protection-tch-2-4(5),
+ high-protection-tch-2-4(6),
+ high-protection-tch-2-4(7)
+ }
+
+U-ALERT::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ reserved INTEGER ( 0..1 ),
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ basic-service-information CHOICE{none NULL, basic-service-information Basic-service-information},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+U-CONNECT ::=
+ SEQUENCE{
+ call-identifier INTEGER (0..1023),
+ hook-method-selection BOOLEAN,
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ basic-service-information CHOICE{none NULL, basic-service-information Basic-service-information},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+U-TX-CEASED::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+U-TX-DEMAND::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ tx-demand-priority INTEGER ( 0..3),
+ encryption-control INTEGER ( 0..1 ),
+ reserved INTEGER ( 0..1 ),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+U-DISCONNECT ::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ disconnect-cause INTEGER ( 0..31 ),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+U-CALL-RESTORE::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ request-to-transmit-send-data INTEGER ( 0..1 ),
+ other-party-address Other-party-address-type,
+ basic-service-information Basic-service-information,
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+D-SETUP ::= SEQUENCE{
+ call-identifier INTEGER (0..16383 ),
+ call-time-out INTEGER (0..15 ),
+ hook-method-selection INTEGER(0..1),
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ basic-service-information Basic-service-information,
+ transmission-grant INTEGER (0..3 ),
+ transmission-request-permission INTEGER (0..1 ),
+ call-priority INTEGER (0..15),
+ optional-elements CHOICE {
+ no-type2 NULL ,
+ type2-parameters SEQUENCE {
+ calling-party-address CHOICE { none NULL, calling-party-address Calling-party-address-type},
+ external-subscriber-number [14] CHOICE { none NULL, external-subscriber-number [14] INTEGER (0..15)},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+D-CALL-PROCEEDING ::=
+ SEQUENCE{
+ call-identifier INTEGER (0..1023),
+ call-time-out-setup-phase INTEGER (0..7),
+ hook-method-selection BOOLEAN ,
+ simplex-duplex-selection INTEGER (0..1),
+ optional-elements CHOICE {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ basic-service-information CHOICE{none NULL, basic-service-information Basic-service-information},
+ call-status CHOICE{none NULL, call-status INTEGER (0..7)},
+ notification-indicator CHOICE{none NULL, notification-indicator INTEGER (0..63) },
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+D-ALERT ::= SEQUENCE{
+
+ call-identifier INTEGER ( 0..1023 ),
+ call-time-out-setup-phase INTEGER ( 0..7 ),
+ reserved INTEGER ( 0..1 ),
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ call-queued BOOLEAN,
+ optional-elements CHOICE
+ {
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ basic-service-infomation CHOICE{none NULL, basic-service-infomation Basic-service-information},
+ notification-indicator CHOICE{none NULL, notification-indicator INTEGER (0..63) },
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+
+D-CONNECT::=
+ SEQUENCE{
+ call-identifier INTEGER (0..1023),
+ call-time-out INTEGER (0..31),
+ hook-method-selection BOOLEAN,
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ transmission-grant INTEGER (0..3),
+ transmission-request-permission INTEGER (0..1) ,
+ call-ownership INTEGER (0..1) ,
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ call-priority CHOICE{none NULL, call-priority INTEGER (0..31)},
+ basic-service-information CHOICE{none NULL, basic-service-information Basic-service-information},
+ temporary-address CHOICE { none NULL, temporary-address Calling-party-address-type},
+ notification-indicator CHOICE { none NULL, notification-indicator INTEGER (0..63)},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+ }
+
+D-CONNECT-ACK::=
+ SEQUENCE{
+ call-identifier INTEGER (0..1023),
+ call-time-out INTEGER (0..15),
+ transmission-grant INTEGER (0..3),
+ transmission-request-permission INTEGER (0..1),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ notification-indicator CHOICE { none NULL, notification-indicator INTEGER (0..63)},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+D-RELEASE::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..16383 ),
+ disconnect-cause INTEGER ( 0..31 ),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ notification-indicator CHOICE {none NULL, notification-indicator INTEGER (0..63) },
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+ }
+
+D-CALL-RESTORE::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ transmission-grant INTEGER ( 0..3 ),
+ transmission-request-permission INTEGER( 0..1 ),
+ reset-call-time-out INTEGER ( 0..1 ),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ new-call-identifier CHOICE{none NULL, new-call-identifier INTEGER (0..1023)},
+ call-time-out CHOICE{none NULL, call-time-out INTEGER ( 0..7 )},
+ call-status CHOICE { none NULL, call-status INTEGER ( 0..7 )},
+ modify CHOICE { none NULL, modify Modify-type},
+ notification-indicator CHOICE { none NULL, notification-indicator INTEGER (0..63)},
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+}
+
+D-TX-CEASED::=
+ SEQUENCE{
+ call-identifier INTEGER ( 0..1023 ),
+ transmission-request-permission INTEGER ( 0..1 ),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-parameters SEQUENCE {
+ notification-indicator CHOICE {none NULL, notification-indicator INTEGER (0..63) },
+ prop [15] CHOICE {none NULL, prop [15] Proprietary }
+ }
+ }
+ }
+
+D-TX-GRANTED ::=
+ SEQUENCE {
+ call-identifier INTEGER ( 0..1023 ),
+ transmission-grant INTEGER ( 0..3 ),
+ transmission-request-permission INTEGER ( 0..1 ),
+ encryption-control INTEGER ( 0..1 ),
+ reserved INTEGER ( 0..1 )
+}
+ D-ATTACH-DETACH-GROUP-IDENTITY ::=SEQUENCE
+{
+ group-identity-report BOOLEAN,
+ group-identity-ack-request BOOLEAN,
+ group-identity-attach-detach-mode BOOLEAN,
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-element SEQUENCE{
+ type3 CHOICE{
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {type3-identifier TYPE3-IDENTIFIER,
+ length INTEGER(0..2047),
+ repeat-num INTEGER(0..63),
+ group-identity-downlink GROUP-IDENTITY-DOWNLINK
+ --proprietary CHOICE{none NULL,proprietary INTEGER(0..7)},
+ --group-report-response CHOICE{none NULL,group-report-response INTEGER(0..7)},
+ -- group-identity-downlink CHOICE{none NULL,group-identity-downlink INTEGER(0..15)}
+ }
+ }
+ }
+ }
+}
+
+D-ATTACH-DETACH-GROUP-IDENTITY-ACK ::=SEQUENCE
+{
+ group-identity-attach-detach-accept BOOLEAN,
+ reserved INTEGER ( 0..1 ),
+ optional-elements CHOICE{
+ no-type2 NULL,
+ type2-element SEQUENCE{
+ type3 CHOICE{
+ no-type3 NULL,
+ type3-elements SEQUENCE
+ {
+ type3-identifier TYPE3-IDENTIFIER,
+ length INTEGER(0..2047),
+ repeat-num INTEGER(0..63),
+ group-identity-downlink GROUP-IDENTITY-DOWNLINK
+ -- proprietary CHOICE{none NULL,proprietary INTEGER(0..7) },
+ -- group-identity-downlink CHOICE{none NULL,group-identity-downlink INTEGER(0..15)}
+ }
+ }
+ }
+ }
+}
+
+SPEECHMODE ::= SEQUENCE
+{
+ encryption-flag INTEGER ( 0..1 ),
+ communication-type CALLMODE,
+ speech-service INTEGER (0..3)
+}
+
+DATAMODE ::= SEQUENCE
+{
+ encryption-flag INTEGER ( 0..1 ),
+ communication-type INTEGER ( 0..3 ),
+ slots-per-frame INTEGER (0..3)
+}
+
+CALLMODE ::= ENUMERATED
+{
+ single-call(0),
+ group-call(1),
+ reserve(2),
+ broadcase(3)
+}
+
+Calling-party-address-type ::= CHOICE {
+ called-party-sna [0] INTEGER ( 0..255 ),
+ called-party-ssi [1] INTEGER ( 0..16777215 ),
+ called-party-ssi-extention [2] SEQUENCE {
+ called-party-ssi INTEGER ( 0..16777215 ),
+ called-party-extention INTEGER ( 0..16777215 )
+ }
+}
+
+Called-party-address-type ::= Calling-party-address-type
+Other-party-address-type ::= Calling-party-address-type
+
+Proprietary ::= [15] SEQUENCE {
+ -- element identifier is 15 as defined in table 212
+ -- the length is encoded in 11 bits (table E.1)
+ data CHOICE
+ {
+ element1 Type1,
+ element Type2
+ }
+}
+
+Proprietary-element-owner ::= INTEGER(0..255)
+
+Type1 ::= SEQUENCE
+{
+ proprietary-element-owner Proprietary-element-owner,
+ proprietary-element-owner-extension BIT STRING
+ }
+
+Type2 ::= SEQUENCE
+{
+ proprietary-element-owner Proprietary-element-owner
+
+ }
+
+Modify-type ::= SEQUENCE{
+ simplex-duplex-selection ENUMERATED {simplex(0), duplex(1)},
+ basic-service-information Basic-service-information
+}
+
+
+
+END \ No newline at end of file
diff --git a/asn1/tetra/tetra.cnf b/asn1/tetra/tetra.cnf
new file mode 100644
index 0000000000..c79d8bc8a4
--- /dev/null
+++ b/asn1/tetra/tetra.cnf
@@ -0,0 +1,334 @@
+# umac.cnf
+# umac conformation file
+
+#.OPT
+-u
+# $Id$
+
+#.MODULE_IMPORT
+
+#.EXPORTS
+
+U-ALERT
+U-CONNECT
+U-DISCONNECT
+U-INFO
+U-RELEASE
+U-SETUP
+U-STATUS
+U-TX-CEASED
+U-TX-DEMAND
+U-CALL-RESTORE
+U-SDS-DATA
+D-ALERT
+D-CALL-PROCEEDING
+D-CONNECT
+D-CONNECT-ACK
+D-DISCONNECT
+D-INFO
+D-RELEASE
+D-SETUP
+D-STATUS
+D-TX-CEASED
+D-TX-GRANTED
+D-CALL-RESTORE
+D-SDS-DATA
+D-TX-WAIT
+D-TX-CONTINUE
+D-ATTACH-DETACH-GROUP-IDENTITY
+D-ATTACH-DETACH-GROUP-IDENTITY-ACK
+U-LOCATION-UPDATE-DEMAND
+U-ATTACH-DETACH-GROUP-IDENTITY
+U-ATTACH-DETACH-GROUP-IDENTITY-ACK
+U-MM-STATUS
+D-LOCATION-UPDATE-ACCEPT
+D-LOCATION-UPDATE-REJECT
+D-MM-STATUS
+
+#.END
+
+
+#.PDU
+AACH
+MAC-DATA
+MAC-FRAG
+MAC-FRAG120
+MAC-END-UPLINK
+MAC-END-UP114
+MAC-END-HU
+MAC-END-DOWNLINK
+MAC-END-DOWN111
+MAC-ACCESS-DEFINE
+MAC-RESOURCE
+MAC-ACCESS
+BSCH
+BNCH
+
+
+
+#.FN_BODY U-RELEASE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
+ }
+#.END
+
+#.FN_BODY D-RELEASE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
+ }
+#.END
+
+
+
+#.FN_BODY D-CALL-PROCEEDING
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-PROCEEDING");
+ }
+#.END
+
+#.FN_BODY D-SETUP
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SETUP");
+ }
+#.END
+
+
+#.FN_BODY U-LOCATION-UPDATE-DEMAND
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-LOCATION-UPDATE-DEMAND");
+ }
+#.END
+
+
+#.FN_BODY D-LOCATION-UPDATE-ACCEPT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-ACCEPT");
+ }
+#.END
+
+
+#.FN_BODY D-CONNECT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT");
+ }
+#.END
+
+#.FN_BODY D-RELEASE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-RELEASE");
+ }
+#.END
+
+#.FN_BODY D-CONNECT-ACK
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CONNECT-ACK");
+ }
+#.END
+
+#.FN_BODY D-INFO
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-INFO");
+ }
+#.END
+
+#.FN_BODY D-DISCONNECT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-DISCONNECT");
+ }
+#.END
+
+#.FN_BODY D-ALERT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-ALERT");
+ }
+#.END
+
+#.FN_BODY D-TX-CEASED
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CEASED");
+ }
+#.END
+
+
+#.FN_BODY D-STATUS
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-STATUS");
+ }
+#.END
+
+#.FN_BODY D-TX-CONTINUE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-CONTINUE");
+ }
+#.END
+
+#.FN_BODY D-TX-GRANTED
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-GRANTED");
+ }
+#.END
+
+#.FN_BODY D-TX-WAIT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
+ }
+#.END
+
+#.FN_BODY D-CALL-RESTORE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-CALL-RESTORE");
+ }
+#.END
+
+#.FN_BODY D-SDS-DATA
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-SDS-DATA");
+ }
+#.END
+
+#.FN_BODY D-TX-WAIT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-TX-WAIT");
+ }
+#.END
+
+
+#.FN_BODY U-ALERT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ALERT");
+ }
+#.END
+
+#.FN_BODY U-CONNECT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CONNECT");
+ }
+#.END
+
+#.FN_BODY U-DISCONNECT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-DISCONNECT");
+ }
+#.END
+
+#.FN_BODY U-RELEASE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-RELEASE");
+ }
+#.END
+
+#.FN_BODY U-SETUP
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SETUP");
+ }
+#.END
+
+#.FN_BODY U-STATUS
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-STATUS");
+ }
+#.END
+
+#.FN_BODY U-SDS-DATA
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-SDS-DATA");
+ }
+#.END
+
+#.FN_BODY U-CALL-RESTORE
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-CALL-RESTORE");
+ }
+#.END
+
+#.FN_BODY U-TX-DEMAND
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-DEMAND");
+ }
+#.END
+
+#.FN_BODY U-TX-CEASED
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-TX-CEASED");
+ }
+#.END
+
+
+#.FN_BODY U-MM-STATUS
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
+ }
+#.END
+
+#.FN_BODY D-MM-STATUS
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-MM-STATUS");
+ }
+#.END
+
+#.FN_BODY U-ATTACH-DETACH-GROUP-IDENTITY
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
+ }
+#.END
+
+#.FN_BODY U-ATTACH-DETACH-GROUP-IDENTITY-ACK
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
+ }
+#.END
+
+#.FN_BODY D-LOCATION-UPDATE-REJECT
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "D-LOCATION-UPDATE-REJECT");
+ }
+#.END
+
+#.FN_BODY D-ATTACH-DETACH-GROUP-IDENTITY
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY");
+ }
+#.END
+
+#.FN_BODY D-ATTACH-DETACH-GROUP-IDENTITY-ACK
+%(DEFAULT_BODY)s
+ if (check_col(actx->pinfo->cinfo, COL_INFO)){
+ col_append_sep_str(actx->pinfo->cinfo, COL_INFO, NULL, "U-ATTACH-DETACH-GROUP-IDENTITY-ACK");
+ }
+#.END \ No newline at end of file