diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-03-13 03:40:53 +0100 |
---|---|---|
committer | Neels Hofmeyr <neels@hofmeyr.de> | 2018-05-27 22:04:17 +0200 |
commit | 70aba3ffe2e6dbff4b8bf17c0f1273d8b4387109 (patch) | |
tree | 01e7d819f0c1039f3d43383a178cf2a23a9f6597 /include | |
parent | 38e58416b1ab32a7f156d01b166493411f4cffdb (diff) |
add support for gsm0808 HANDOVER REQUIRED message
Related: OS#2283 (inter-BSC Handover, BSC side, MO)
Change-Id: Idb6dc3eab0282158a17091d97ed77c1e2e3eb3c2
Diffstat (limited to 'include')
-rw-r--r-- | include/osmocom/gsm/gsm0808.h | 37 | ||||
-rw-r--r-- | include/osmocom/gsm/protocol/gsm_08_08.h | 22 |
2 files changed, 59 insertions, 0 deletions
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h index 369d713c..4f239e66 100644 --- a/include/osmocom/gsm/gsm0808.h +++ b/include/osmocom/gsm/gsm0808.h @@ -25,6 +25,7 @@ #include "tlv.h" #include <osmocom/gsm/protocol/gsm_08_08.h> +#include <osmocom/gsm/gsm0808_utils.h> #include <osmocom/gsm/gsm23003.h> struct sockaddr_storage; @@ -80,6 +81,42 @@ struct msgb *gsm0808_create_paging(const char *imsi, const uint32_t *tmsi, const uint8_t *chan_needed) OSMO_DEPRECATED("use gsm0808_create_paging2 instead"); +/*! 3GPP TS 48.008 §3.2.2.5.8 Old BSS to New BSS information */ +struct gsm0808_old_bss_to_new_bss_info { + bool extra_information_present; + struct { + bool prec; + bool lcs; + bool ue_prob; + } extra_information; + + bool current_channel_type_2_present; + struct { + uint8_t mode; + uint8_t field; + } current_channel_type_2; + + /* more items are defined in the spec and may be added later */ +}; + +/*! 3GPP TS 48.008 §3.2.1.9 HANDOVER REQUIRED */ +struct gsm0808_handover_required { + uint16_t cause; + struct gsm0808_cell_id_list2 cil; + + bool current_channel_type_1_present; + uint8_t current_channel_type_1; + + bool speech_version_used_present; + uint8_t speech_version_used; + + bool old_bss_to_new_bss_info_present; + struct gsm0808_old_bss_to_new_bss_info old_bss_to_new_bss_info; + + /* more items are defined in the spec and may be added later */ +}; +struct msgb *gsm0808_create_handover_required(const struct gsm0808_handover_required *params); + struct msgb *gsm0808_create_dtap(struct msgb *msg, uint8_t link_id); void gsm0808_prepend_dtap_header(struct msgb *msg, uint8_t link_id); diff --git a/include/osmocom/gsm/protocol/gsm_08_08.h b/include/osmocom/gsm/protocol/gsm_08_08.h index b699080c..60b96812 100644 --- a/include/osmocom/gsm/protocol/gsm_08_08.h +++ b/include/osmocom/gsm/protocol/gsm_08_08.h @@ -295,6 +295,28 @@ enum GSM0808_IE_CODING { GSM0808_IE_LAST_USED_EUTRAN_PLMN_ID = 0x95, }; +/* 3GPP TS 48.008 3.2.3 Signalling Field Element Coding */ +enum GSM0808_SIGNALLING_FIELD_ELEMENT_CODING { + GSM0808_FE_IE_EXTRA_INFORMATION = 0x01, /*< 3.2.3.1 */ + GSM0808_FE_IE_CURRENT_CHANNEL_TYPE_2 = 0x02, /*< 3.2.3.2 */ + GSM0808_FE_IE_TARGET_CELL_RADIO_INFORMATION = 0x03, /*< 3.2.3.3 */ + GSM0808_FE_IE_GPRS_SUSPEND_INFORMATION = 0x04, /*< 3.2.3.4 */ + GSM0808_FE_IE_MULTIRATE_CONFIGURATION_INFORMATION = 0x05, /*< 3.2.3.5 */ + GSM0808_FE_IE_DUAL_TRANSFER_MODE_INFORMATION = 0x06, /*< 3.2.3.6 */ + GSM0808_FE_IE_INTER_RAT_HANDOVER_INFO = 0x07, /*< 3.2.3.7 */ + GSM0808_FE_IE_CDMA2000_CAPABILITY_INFORMATION = 0x08, /*< 3.2.3.8 */ + GSM0808_FE_IE_DOWNLINK_CELL_LOAD_INFORMATION = 0x09, /*< 3.2.3.9 */ + GSM0808_FE_IE_UPLINK_CELL_LOAD_INFORMATION = 0x0a, /*< 3.2.3.10 */ + GSM0808_FE_IE_CELL_LOAD_INFORMATION_GROUP = 0x0b, /*< 3.2.3.11 */ + GSM0808_FE_IE_CELL_LOAD_INFORMATION = 0x0c, /*< 3.2.3.12 */ + GSM0808_FE_IE_PS_INDICATION = 0x0d, /*< 3.2.3.13 */ + GSM0808_FE_IE_DTM_HANDOVER_COMMAND_INDICATION = 0x0e, /*< 3.2.3.14 */ + GSM0808_FE_IE_D_RNTI = 0xfe, /*< 3.2.3.15 */ + GSM0808_FE_IE_IRAT_MEASUREMENT_CONFIGURATION = 0x0f, /*< 3.2.3.16 */ + GSM0808_FE_IE_SOURCE_CELL_ID = 0x10, /*< 3.2.3.17 */ + GSM0808_FE_IE_IRAT_MEASUREMENT_CONFIGURATION_EXTENDED_E_ARFCNS = 0x11, /*< 3.2.3.18 */ +}; + /* GSM 08.08 3.2.2.5 Cause */ enum gsm0808_cause { GSM0808_CAUSE_RADIO_INTERFACE_MESSAGE_FAILURE = 0, |