dexter has uploaded this change for review. ( https://gerrit.osmocom.org/11728
Change subject: gsm0808: add message generator for BSSMAP HANDOVER PERFORMED ...................................................................... gsm0808: add message generator for BSSMAP HANDOVER PERFORMED We currently have no generator function that can generate BSSMAP HANDOVER PERFORMED messages. Lets add function for this. Change-Id: I825106858bd89afc9837811b8fed2e8accc82441 Related: OS#3645 --- M include/osmocom/gsm/gsm0808.h M src/gsm/gsm0808.c M src/gsm/libosmogsm.map 3 files changed, 69 insertions(+), 0 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/28/11728/1 diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h index cdbb273..4d12566 100644 --- a/include/osmocom/gsm/gsm0808.h +++ b/include/osmocom/gsm/gsm0808.h @@ -168,6 +168,24 @@ }; struct msgb *gsm0808_create_handover_failure(const struct gsm0808_handover_failure *params); +struct gsm0808_handover_performed { + uint16_t cause; + struct osmo_cell_global_id cell; + + bool chosen_channel_present; + uint8_t chosen_channel; + + bool chosen_encr_alg_present; + uint8_t chosen_encr_alg; + + bool speech_version_chosen_present; + uint8_t speech_version_chosen; + + bool speech_codec_chosen_present; + struct gsm0808_speech_codec speech_codec_chosen; +}; +struct msgb *gsm0808_create_handover_performed(const struct gsm0808_handover_performed *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/src/gsm/gsm0808.c b/src/gsm/gsm0808.c index e5c3e30..7246289 100644 --- a/src/gsm/gsm0808.c +++ b/src/gsm/gsm0808.c @@ -871,6 +871,56 @@ return msg; } +/*! Create BSSMAP HANDOVER PERFORMED message, 3GPP TS 48.008 3.2.1.25. + * \param[in] params All information to be encoded. + * \returns callee-allocated msgb with BSSMAP HANDOVER PERFORMED message */ +struct msgb *gsm0808_create_handover_performed(const struct gsm0808_handover_performed *params) +{ + struct msgb *msg; + struct { + uint8_t ident; + struct gsm48_loc_area_id lai; + uint16_t ci; + } __attribute__ ((packed)) lai_ci; + + msg = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM, "BSSMAP-HANDOVER-PERFORMED"); + if (!msg) + return NULL; + + /* Message Type, 3.2.2.1 */ + msgb_v_put(msg, BSS_MAP_MSG_HANDOVER_PERFORMED); + + /* Cause, 3.2.2.5 */ + msgb_tlv_put(msg, GSM0808_IE_CAUSE, params->cause & 0x80 ? 2 : 1, (const uint8_t *)¶ms->cause); + + /* Cell Identifier, 3.2.2.17 */ + lai_ci.ident = CELL_IDENT_WHOLE_GLOBAL; + gsm48_generate_lai2(&lai_ci.lai, ¶ms->cell.lai); + lai_ci.ci = osmo_htons(params->cell.cell_identity); + msgb_tlv_put(msg, GSM0808_IE_CELL_IDENTIFIER, sizeof(lai_ci), (uint8_t *) & lai_ci); + + /* Chosen Channel 3.2.2.33 */ + if (params->chosen_channel_present) + msgb_tv_put(msg, GSM0808_IE_CHOSEN_CHANNEL, params->chosen_channel); + + /* Chosen Encryption Algorithm 3.2.2.44 */ + if (params->chosen_encr_alg_present) + msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, params->chosen_encr_alg); + + /* Sspeech Version (chosen) 3.2.2.51 */ + if (params->speech_version_chosen_present) + msgb_tv_put(msg, GSM0808_IE_SPEECH_VERSION, params->speech_version_chosen); + + /* AoIP: Speech Codec (chosen) 3.2.2.104 */ + if (params->speech_codec_chosen_present) + gsm0808_enc_speech_codec(msg, ¶ms->speech_codec_chosen); + + /* prepend header with final length */ + msg->l3h = msgb_tv_push(msg, BSSAP_MSG_BSS_MANAGEMENT, msgb_length(msg)); + + return msg; +} + /*! Prepend a DTAP header to given Message Buffer * \param[in] msgb Message Buffer * \param[in] link_id Link Identifier */ diff --git a/src/gsm/libosmogsm.map b/src/gsm/libosmogsm.map index 4813e13..34a7ff3 100644 --- a/src/gsm/libosmogsm.map +++ b/src/gsm/libosmogsm.map @@ -178,6 +178,7 @@ gsm0808_create_handover_detect; gsm0808_create_handover_complete; gsm0808_create_handover_failure; +gsm0808_create_handover_performed; gsm0808_prepend_dtap_header; gsm0808_enc_aoip_trasp_addr; gsm0808_dec_aoip_trasp_addr; -- To view, visit https://gerrit.osmocom.org/11728 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-MessageType: newchange Gerrit-Change-Id: I825106858bd89afc9837811b8fed2e8accc82441 Gerrit-Change-Number: 11728 Gerrit-PatchSet: 1 Gerrit-Owner: dexter <pma...@sysmocom.de>