aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2008-12-28 16:32:39 +0000
committerHolger Freyther <zecke@selfish.org>2008-12-28 16:32:39 +0000
commit5e85c8ea4099a8df3520adc167a117dea62564c1 (patch)
tree736e4a64d4fc397bc5f6d3810c7c199a54978ec8 /include
parentefde7fb1eb0fd3597c5171584380c41cfe4a0685 (diff)
[gsm_04_08] Add structs for system information type 1 to 6
system information type 4 is a bit tricky as it has a variable length and is terminated by a manadantory field. System Information Type 6 has a mandantory SI 6 Reset Octet but our BTS is happy with not receiving it. Make it optional by the adding a 'pointer'. System Information Type 5 and System Information Type 6 are send through rsl_sacch_filling and it looks like we do not need to send the L2 pseudo length. So far we have not found the documentation confirming this. This is why the header from Type 1 to Type 4 is not used.
Diffstat (limited to 'include')
-rw-r--r--include/openbsc/gsm_04_08.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/include/openbsc/gsm_04_08.h b/include/openbsc/gsm_04_08.h
index f10d82190..24989b144 100644
--- a/include/openbsc/gsm_04_08.h
+++ b/include/openbsc/gsm_04_08.h
@@ -69,6 +69,74 @@ struct gsm48_hdr {
u_int8_t data[0];
} __attribute__ ((packed));
+/* Section 9.1.3x System information Type header */
+struct gsm48_system_information_type_header {
+ u_int8_t l2_plen;
+ u_int8_t rr_protocol_discriminator :4,
+ skip_indicator:4;
+ u_int8_t system_information;
+} __attribute__ ((packed));
+
+/* Section 9.1.31 System information Type 1 */
+struct gsm48_system_information_type_1 {
+ struct gsm48_system_information_type_header header;
+ u_int8_t cell_channel_description[16];
+ u_int8_t rach_control_parameter[3];
+ u_int8_t s1_reset;
+} __attribute__ ((packed));
+
+/* Section 9.1.32 System information Type 2 */
+struct gsm48_system_information_type_2 {
+ struct gsm48_system_information_type_header header;
+ u_int8_t bcch_frequency_list[16];
+ u_int8_t ncc_permitted;
+ u_int8_t rach_control_parameter[3];
+} __attribute__ ((packed));
+
+/* Section 9.1.35 System information Type 3 */
+struct gsm48_system_information_type_3 {
+ struct gsm48_system_information_type_header header;
+ u_int16_t cell_identity;
+ struct gsm48_loc_area_id lai;
+ u_int8_t control_channel_description[3];
+ u_int8_t cell_options;
+ u_int8_t cell_selection[2];
+ u_int8_t rach_control_parameter[3];
+ u_int8_t s3_reset_octets[4];
+} __attribute__ ((packed));
+
+/* Section 9.1.36 System information Type 4 */
+struct gsm48_system_information_type_4 {
+ struct gsm48_system_information_type_header header;
+ struct gsm48_loc_area_id lai;
+ u_int8_t cell_selection[2];
+ u_int8_t rach_control_parameter[3];
+ /* optional CBCH conditional CBCH... followed by
+ mandantory SI 4 Reset Octets
+ */
+ u_int8_t data[0];
+} __attribute__ ((packed));
+
+/* Section 9.1.37 System information Type 5 */
+struct gsm48_system_information_type_5 {
+ u_int8_t rr_protocol_discriminator :4,
+ skip_indicator:4;
+ u_int8_t system_information;
+ u_int8_t bcch_frequency_list[16];
+} __attribute__ ((packed));
+
+/* Section 9.1.40 System information Type 6 */
+struct gsm48_system_information_type_6 {
+ u_int8_t rr_protocol_discriminator :4,
+ skip_indicator:4;
+ u_int8_t system_information;
+ u_int8_t cell_identity[2];
+ struct gsm48_loc_area_id lai;
+ u_int8_t cell_options;
+ u_int8_t ncc_permitted;
+ u_int8_t si_6_reset[0];
+} __attribute__ ((packed));
+
/* Section 10.2 + GSM 04.07 12.2.3.1.1 */
#define GSM48_PDISC_GROUP_CC 0x00
#define GSM48_PDISC_BCAST_CC 0x01