summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/include/osmocom/gsm48_rr.h
diff options
context:
space:
mode:
authorAndreas Eversberg2010-04-25 18:28:24 +0200
committerAndreas Eversberg2010-04-25 18:28:24 +0200
commitf1278ad9da228145925fd613d28c082dbf2806d6 (patch)
tree7c8268c920f57e05911dfb8ed0e86442bbd8fabd /src/host/layer23/include/osmocom/gsm48_rr.h
parentRemoved the code from gsm48-andreas. (diff)
downloadosmocom-f1278ad9da228145925fd613d28c082dbf2806d6.tar.gz
osmocom-f1278ad9da228145925fd613d28c082dbf2806d6.tar.xz
osmocom-f1278ad9da228145925fd613d28c082dbf2806d6.zip
Added new application "mobile" to layer23.
This is the current status of the layer 3 protocols. Everything compiles, radio ressource layer is partly complete. Everything is untested, so don't expect that it runs and does something usefull. The next step for me is running and debugging it. Here is the list of files that are added / modified: new file: ../include/osmocom/gsm322.h new file: ../include/osmocom/gsm48_cc.h new file: ../include/osmocom/gsm48_mm.h new file: ../include/osmocom/gsm48_rr.h modified: ../include/osmocom/l23_app.h modified: ../include/osmocom/logging.h new file: ../include/osmocom/mncc.h modified: ../include/osmocom/osmocom_data.h new file: ../include/osmocom/subscriber.h new file: ../include/osmocom/support.h new file: ../include/osmocom/sysinfo.h new file: ../include/osmocom/transaction.h modified: Makefile.am new file: app_mobile.c new file: gsm322.c new file: gsm48_cc.c new file: gsm48_mm.c new file: gsm48_rr.c modified: main.c new file: mnccms.c new file: subscriber.c new file: support.c new file: sysinfo.c new file: transaction.c
Diffstat (limited to 'src/host/layer23/include/osmocom/gsm48_rr.h')
-rw-r--r--src/host/layer23/include/osmocom/gsm48_rr.h146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/host/layer23/include/osmocom/gsm48_rr.h b/src/host/layer23/include/osmocom/gsm48_rr.h
new file mode 100644
index 0000000..9285f58
--- /dev/null
+++ b/src/host/layer23/include/osmocom/gsm48_rr.h
@@ -0,0 +1,146 @@
+#ifndef _GSM48_RR_H
+#define _GSM48_RR_H
+
+#include "osmocore/protocol/gsm_04_08.h"
+
+/* GSM 04.07 9.1.2 */
+#define GSM48_RR_EST_REQ 0x10
+#define GSM48_RR_EST_IND 0x12
+#define GSM48_RR_EST_CNF 0x11
+#define GSM48_RR_REL_IND 0x22
+#define GSM48_RR_SYNC_IND 0x32
+#define GSM48_RR_DATA_REQ 0x40
+#define GSM48_RR_DATA_IND 0x42
+#define GSM48_RR_UNIT_DATA_IND 0x52
+#define GSM48_RR_ABORT_REQ 0x60
+#define GSM48_RR_ABORT_IND 0x62
+#define GSM48_RR_ACT_REQ 0x70
+
+#define RR_EST_CAUSE_EMERGENCY 1
+#define RR_EST_CAUSE_REESTAB_TCH_F 2
+#define RR_EST_CAUSE_REESTAB_TCH_H 3
+#define RR_EST_CAUSE_REESTAB_2_TCH_H 4
+#define RR_EST_CAUSE_ANS_PAG_ANY 5
+#define RR_EST_CAUSE_ANS_PAG_SDCCH 6
+#define RR_EST_CAUSE_ANS_PAG_TCH_F 7
+#define RR_EST_CAUSE_ANS_PAG_TCH_ANY 8
+#define RR_EST_CAUSE_ORIG_TCHF 9
+#define RR_EST_CAUSE_LOC_UPD 12
+#define RR_EST_CAUSE_OTHER_SDCCH 13
+
+#define RR_REL_CAUSE_UNDEFINED 0
+#define RR_REL_CAUSE_NOT_AUTHORIZED 1
+#define RR_REL_CAUSE_RA_FAILURE 2
+#define RR_REL_CAUSE_T3122 3
+#define RR_REL_CAUSE_TRY_LATER 4
+#define RR_REL_CAUSE_EMERGENCY_ONLY 5
+
+#define L3_ALLOC_SIZE 256
+#define L3_ALLOC_HEADROOM 64
+
+#define RR_ALLOC_SIZE 256
+#define RR_ALLOC_HEADROOM 64
+
+/* GSM 04.08 RR-SAP header */
+struct gsm48_rr_hdr {
+ uint32_t msg_type; /* RR-* primitive */
+ uint8_t cause;
+};
+
+/* GSM 04.07 9.1.1 */
+#define GSM48_RR_ST_IDLE 0
+#define GSM48_RR_ST_CONN_PEND 1
+#define GSM48_RR_ST_DEDICATED 2
+
+/* channel description */
+struct gsm48_rr_cd {
+ uint8_t tsc;
+ uint8_t h; /* using hopping */
+ uint16_t arfcn;
+ uint8_t maio;
+ uint8_t hsn;
+ uint8_t chan_nr; /* type, slot, sub slot */
+ uint8_t link_id;
+ uint8_t ta; /* timing advance */
+ uint8_t mob_alloc_lv[9]; /* len + up to 64 bits */
+ uint8_t start_t1, start_t2, start_t3; /* start. time */
+};
+
+/* measurements */
+struct gsm48_rr_meas {
+ uint8_t rxlev_full;
+ uint8_t rxlev_sub;
+ uint8_t rxqual_full;
+ uint8_t rxqual_sub;
+ uint8_t dtx;
+ uint8_t ba;
+ uint8_t meas_valid;
+ uint8_t ncell_na;
+ uint8_t count;
+ uint8_t rxlev_nc[6];
+ uint8_t bsic_nc[6];
+ uint8_t bcch_f_nc[6];
+};
+
+/* RR sublayer instance */
+struct gsm48_rrlayer {
+ struct osmocom_ms *ms;
+ int state;
+
+ /* queue for RSL-SAP message upwards */
+ struct llist_head rsl_upqueue;
+
+ /* queue for messages while RR connection is built up */
+ struct llist_head downqueue;
+
+ /* timers */
+ struct timer_list t3122;
+ struct timer_list t3124;
+ struct timer_list t3126;
+ int t3126_value;
+#ifndef TODO
+ struct timer_list temp_rach_ti; /* temporary timer */
+#endif
+
+ /* states if RR-EST-REQ was used */
+ int rr_est_req;
+ struct msgb *rr_est_msg;
+
+ /* channel request states */
+ uint8_t wait_assign; /* waiting for assignment state */
+ uint8_t n_chan_req; /* number left, incl. current */
+ uint8_t chan_req_val; /* current request value */
+ uint8_t chan_req_mask; /* mask of random bits */
+ int16_t cr_hist[3];
+ /* cr_hist must be signed and greater 8 bit, -1 = no value */
+
+ /* current channel descriptions */
+ uint16_t arfcn; /* dedicated mode only */
+ struct gsm48_rr_cd cd_now;
+
+ /* current cipering */
+ uint8_t cipher_on;
+ uint8_t cipher_type; /* 10.5.2.9 */
+
+ /* special states when changing channel */
+ int hando_susp_state;
+ int assign_susp_state;
+ int resume_last_state;
+ struct gsm48_rr_cd cd_last;
+
+ /* measurements */
+ struct gsm48_rr_meas meas;
+};
+
+const char *get_rr_name(int value);
+extern int gsm48_rr_init(struct osmocom_ms *ms);
+extern int gsm48_rr_exit(struct osmocom_ms *ms);
+int gsm48_rsl_dequeue(struct osmocom_ms *ms);
+int gsm48_rr_downmsg(struct osmocom_ms *ms, struct msgb *msg);
+struct msgb *gsm48_l3_msgb_alloc(void);
+struct msgb *gsm48_rr_msgb_alloc(int msg_type);
+int gsm48_decode_lai(struct gsm48_loc_area_id *lai, uint16_t *mcc,
+ uint16_t *mnc, uint16_t *lac);
+int gsm48_rr_enc_cm2(struct osmocom_ms *ms, struct gsm48_classmark2 *cm);
+
+#endif /* _GSM48_RR_H */