diff options
| author | Neels Hofmeyr <neels@hofmeyr.de> | 2019-03-06 04:25:38 +0100 | 
|---|---|---|
| committer | Neels Hofmeyr <neels@hofmeyr.de> | 2019-05-03 16:15:23 +0200 | 
| commit | f7e9c51bdc61713c39a26f28a469173f225f4711 (patch) | |
| tree | c90ad0bfba8d9f80ab03752647a0e18ecb090b25 /include | |
| parent | 412a4bb6f66382cc6fc37313b46ad27343d4cae6 (diff) | |
BSSMAP: add messages for inter-BSC and inter-MSC Handover
Change-Id: I9dac375331f6bea744769e973725d58e35f87226
Diffstat (limited to 'include')
| -rw-r--r-- | include/osmocom/gsm/gsm0808.h | 66 | 
1 files changed, 66 insertions, 0 deletions
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h index 0f2bf1fb..2f194663 100644 --- a/include/osmocom/gsm/gsm0808.h +++ b/include/osmocom/gsm/gsm0808.h @@ -27,6 +27,7 @@  #include <osmocom/gsm/protocol/gsm_08_08.h>  #include <osmocom/gsm/gsm0808_utils.h>  #include <osmocom/gsm/gsm23003.h> +#include <osmocom/gsm/protocol/gsm_23_003.h>  #include <osmocom/core/utils.h>  #define BSSMAP_MSG_SIZE 1024 @@ -143,11 +144,76 @@ struct gsm0808_handover_required {  };  struct msgb *gsm0808_create_handover_required(const struct gsm0808_handover_required *params); +/*! 3GPP TS 48.008 §3.2.1.37 HANDOVER REQUIRED REJECT */ +struct gsm0808_handover_required_reject { +	uint16_t cause; + +	/* more items are defined in the spec and may be added later */ +	bool more_items; /*< always set this to false */ +}; +struct msgb *gsm0808_create_handover_required_reject(const struct gsm0808_handover_required_reject *params); + +/*! 3GPP TS 48.008 §3.2.1.8 HANDOVER REQUEST */ +struct gsm0808_handover_request { +	struct gsm0808_channel_type channel_type; +	struct gsm0808_encrypt_info encryption_information; +	struct osmo_gsm48_classmark classmark_information; +	struct gsm0808_cell_id cell_identifier_serving; +	struct gsm0808_cell_id cell_identifier_target; +	enum gsm0808_cause cause; + +	bool current_channel_type_1_present; +	uint8_t current_channel_type_1; + +	enum gsm0808_permitted_speech speech_version_used; + +	uint8_t chosen_encryption_algorithm_serving; + +	/*! Pass either old_bss_to_new_bss_info or old_bss_to_new_bss_info_raw. */ +	bool old_bss_to_new_bss_info_present; +	struct gsm0808_old_bss_to_new_bss_info old_bss_to_new_bss_info; +	/*! To feed the Old BSS to New BSS Information IE unchanged from the Handover Required message without having to +	 * decode it. Pass either old_bss_to_new_bss_info or old_bss_to_new_bss_info_raw. Omit the TL part. */ +	const uint8_t *old_bss_to_new_bss_info_raw; +	uint8_t old_bss_to_new_bss_info_raw_len; + +	const char *imsi; + +	const struct sockaddr_storage *aoip_transport_layer; + +	const struct gsm0808_speech_codec_list *codec_list_msc_preferred; + +	bool call_id_present; +	uint32_t call_id; + +	const uint8_t *global_call_reference; +	uint8_t global_call_reference_len; + +	/* more items are defined in the spec and may be added later */ +	bool more_items; /*!< always set this to false */ +}; +struct msgb *gsm0808_create_handover_request(const struct gsm0808_handover_request *params); +  struct msgb *gsm0808_create_handover_request_ack(const uint8_t *l3_info, uint8_t l3_info_len,  						 uint8_t chosen_channel, uint8_t chosen_encr_alg,  						 uint8_t chosen_speech_version); +struct gsm0808_handover_command { +	const uint8_t *l3_info; +	uint8_t l3_info_len; + +	struct gsm0808_cell_id cell_identifier; + +	const uint8_t *new_bss_to_old_bss_info_raw; +	size_t new_bss_to_old_bss_info_raw_len; + +	/* more items are defined in the spec and may be added later */ +	bool more_items; /*!< always set this to false */ +}; +struct msgb *gsm0808_create_handover_command(const struct gsm0808_handover_command *params); +  struct msgb *gsm0808_create_handover_detect(); +struct msgb *gsm0808_create_handover_succeeded();  struct gsm0808_handover_complete {  	bool rr_cause_present;  | 
