diff options
Diffstat (limited to 'openbsc/include/openbsc/gsm_04_11.h')
-rw-r--r-- | openbsc/include/openbsc/gsm_04_11.h | 120 |
1 files changed, 78 insertions, 42 deletions
diff --git a/openbsc/include/openbsc/gsm_04_11.h b/openbsc/include/openbsc/gsm_04_11.h index 12c607f54..09740e0f3 100644 --- a/openbsc/include/openbsc/gsm_04_11.h +++ b/openbsc/include/openbsc/gsm_04_11.h @@ -3,6 +3,21 @@ /* GSM TS 04.11 definitions */ +/* Chapter 5.2.3: SMC-CS states at the network side */ +enum gsm411_cp_state { + GSM411_CPS_IDLE = 0, + GSM411_CPS_MM_CONN_PENDING = 1, /* only MT ! */ + GSM411_CPS_WAIT_CP_ACK = 2, + GSM411_CPS_MM_ESTABLISHED = 3, +}; + +/* Chapter 6.2.2: SMR states at the network side */ +enum gsm411_rp_state { + GSM411_RPS_IDLE = 0, + GSM411_RPS_WAIT_FOR_RP_ACK = 1, + GSM411_RPS_WAIT_TO_TX_RP_ACK = 3, +}; + /* Chapter 8.1.2 (refers to GSM 04.07 Chapter 11.2.3.1.1 */ #define GSM411_PDISC_SMS 0x09 @@ -16,20 +31,68 @@ enum gsm411_cp_ie { GSM411_CP_IE_CAUSE = 0x02, /* 8.1.4.2. */ }; +/* Section 8.1.4.2 / Table 8.2 */ +enum gsm411_cp_cause { + GSM411_CP_CAUSE_NET_FAIL = 17, + GSM411_CP_CAUSE_CONGESTION = 22, + GSM411_CP_CAUSE_INV_TRANS_ID = 81, + GSM411_CP_CAUSE_SEMANT_INC_MSG = 95, + GSM411_CP_CAUSE_INV_MAND_INF = 96, + GSM411_CP_CAUSE_MSGTYPE_NOTEXIST= 97, + GSM411_CP_CAUSE_MSG_INCOMP_STATE= 98, + GSM411_CP_CAUSE_IE_NOTEXIST = 99, + GSM411_CP_CAUSE_PROTOCOL_ERR = 111, +}; + /* Chapter 8.2.2 */ #define GSM411_MT_RP_DATA_MO 0x00 #define GSM411_MT_RP_DATA_MT 0x01 #define GSM411_MT_RP_ACK_MO 0x02 #define GSM411_MT_RP_ACK_MT 0x03 #define GSM411_MT_RP_ERROR_MO 0x04 -#define GSM411_MT_RP_ERROR_MT 0x04 -#define GSM411_MT_RP_SMMA_MO 0x05 +#define GSM411_MT_RP_ERROR_MT 0x05 +#define GSM411_MT_RP_SMMA_MO 0x06 enum gsm411_rp_ie { GSM411_IE_RP_USER_DATA = 0x41, /* 8.2.5.3 */ GSM411_IE_RP_CAUSE = 0x42, /* 8.2.5.4 */ }; +/* Chapter 8.2.5.4 Table 8.4 */ +enum gsm411_rp_cause { + /* valid only for MO */ + GSM411_RP_CAUSE_MO_NUM_UNASSIGNED = 1, + GSM411_RP_CAUSE_MO_OP_DET_BARR = 8, + GSM411_RP_CAUSE_MO_CALL_BARRED = 10, + GSM411_RP_CAUSE_MO_SMS_REJECTED = 21, + GSM411_RP_CAUSE_MO_DEST_OUT_OF_ORDER = 27, + GSM411_RP_CAUSE_MO_UNIDENTIFIED_SUBSCR = 28, + GSM411_RP_CAUSE_MO_FACILITY_REJ = 29, + GSM411_RP_CAUSE_MO_UNKNOWN_SUBSCR = 30, + GSM411_RP_CAUSE_MO_NET_OUT_OF_ORDER = 38, + GSM411_RP_CAUSE_MO_TEMP_FAIL = 41, + GSM411_RP_CAUSE_MO_CONGESTION = 42, + GSM411_RP_CAUSE_MO_RES_UNAVAIL = 47, + GSM411_RP_CAUSE_MO_REQ_FAC_NOTSUBSCR = 50, + GSM411_RP_CAUSE_MO_REQ_FAC_NOTIMPL = 69, + GSM411_RP_CAUSE_MO_INTERWORKING = 127, + /* valid only for MT */ + GSM411_RP_CAUSE_MT_MEM_EXCEEDED = 22, + /* valid for both directions */ + GSM411_RP_CAUSE_INV_TRANS_REF = 81, + GSM411_RP_CAUSE_SEMANT_INC_MSG = 95, + GSM411_RP_CAUSE_INV_MAND_INF = 96, + GSM411_RP_CAUSE_MSGTYPE_NOTEXIST = 97, + GSM411_RP_CAUSE_MSG_INCOMP_STATE = 98, + GSM411_RP_CAUSE_IE_NOTEXIST = 99, + GSM411_RP_CAUSE_PROTOCOL_ERR = 111, +}; + +/* Chapter 10: Timers */ +#define GSM411_TMR_TR1M 40 /* 35 < x < 45 seconds */ +#define GSM411_TMR_TRAM 30 /* 25 < x < 35 seconds */ +#define GSM411_TMR_TR2M 15 /* 12 < x < 20 seconds */ + /* Chapter 8.2.1 */ struct gsm411_rp_hdr { u_int8_t len; @@ -46,29 +109,6 @@ enum sms_alphabet { DCS_8BIT_DATA, }; -/* SMS submit PDU */ -struct sms_submit { - u_int8_t *smsc; - u_int8_t mti:2; - u_int8_t vpf:2; - u_int8_t msg_ref; - u_int8_t pid; - u_int8_t dcs; - u_int8_t *vp; - u_int8_t ud_len; - u_int8_t *user_data; - - /* interpreted */ - u_int8_t mms:1; - u_int8_t sri:1; - u_int8_t udhi:1; - u_int8_t rp:1; - enum sms_alphabet alphabet; - char dest_addr[20+1]; /* DA LV is 12 bytes max, i.e. 10 bytes BCD == 20 bytes string */ - unsigned long validity_mins; - char decoded[256]; -}; - /* GSM 03.40 / Chapter 9.2.3.1: TP-Message-Type-Indicator */ #define GSM340_SMS_DELIVER_SC2MS 0x00 #define GSM340_SMS_DELIVER_REP_MS2SC 0x00 @@ -141,23 +181,22 @@ struct sms_submit { #define GSM338_DCS_1111_CLASS2_SIM 2 #define GSM338_DCS_1111_CLASS3_TE 3 /* See TS 07.05 */ - /* SMS deliver PDU */ struct sms_deliver { + u_int8_t mti:2; /* message type indicator */ + u_int8_t mms:1; /* more messages to send */ + u_int8_t rp:1; /* reply path */ + u_int8_t udhi:1; /* user data header indicator */ + u_int8_t sri:1; /* status report indication */ + u_int8_t *orig_addr; /* originating address */ + u_int8_t pid; /* protocol identifier */ + u_int8_t dcs; /* data coding scheme */ + /* service centre time stamp */ + u_int8_t ud_len; /* user data length */ + u_int8_t *user_data; /* user data */ + + u_int8_t msg_ref; /* message reference */ u_int8_t *smsc; - u_int8_t mti:2; - u_int8_t rd:1; - u_int8_t vpf:2; - u_int8_t srr:1; - u_int8_t udhi:1; - u_int8_t rp:1; - u_int8_t msg_ref; - u_int8_t *orig_addr; - u_int8_t pid; - u_int8_t dcs; - u_int8_t vp; - u_int8_t ud_len; - u_int8_t *user_data; }; struct msgb; @@ -166,7 +205,4 @@ int gsm0411_rcv_sms(struct msgb *msg); int gsm0411_send_sms(struct gsm_lchan *lchan, struct sms_deliver *sms); -struct msgb *gsm411_msgb_alloc(void); -int gsm0411_sendmsg(struct msgb *msg); - #endif |