From 73b943e88d4a2f077f6bfec643da796643e9455b Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Thu, 14 Mar 2019 04:10:25 +0100 Subject: add gsm0808_create_handover_request_ack2 to add AoIP RTP addr osmo-bsc so far omits the AoIP Transport Layer Address from its Handover Request Acknowledge message, which breaks inter-BSC Handover for AoIP. Allow fixing that. One quirk I really don't like about this: I would prefer to directly use struct sockaddr_storage as a member of the struct gsm0808_handover_request_ack. Even though struct sockaddr_storage appears in various function signatures, the gsm0808.c actually also gets built on embedded systems that lack arpa/inet.h (for me indicated by the ARM build job on jenkins). Compiling gsm0808.c works only because the actual coding of struct sockaddr_storage is implemented in gsm0808_util.c, which (apparently) does not get built on embedded and hence, even though there are undefined references to e.g. gsm0808_enc_aoip_trasp_addr() it works. Related: I4a5acdb2d4a0b947cc0c62067a67be88a3d467ff (osmo-bsc) Change-Id: Ia71542ea37d4fd2c9fb9b40357db7aeb111ec576 --- include/osmocom/gsm/gsm0808.h | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) (limited to 'include') diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h index 5b05dbc8..93195b50 100644 --- a/include/osmocom/gsm/gsm0808.h +++ b/include/osmocom/gsm/gsm0808.h @@ -194,9 +194,29 @@ struct gsm0808_handover_request { }; 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_request_ack { + const uint8_t *l3_info; + uint8_t l3_info_len; + + bool chosen_channel_present; + uint8_t chosen_channel; + + /*! For A5/N set chosen_encr_alg = N+1, e.g. chosen_encr_alg = 1 means A5/0 (no encryption), 2 means A5/1, 4 + * means A5/3. Set chosen_encr_alg = 0 to omit the Chosen Encryption Algorithm IE. */ + uint8_t chosen_encr_alg; + + /* chosen_speech_version == 0 omits the IE */ + enum gsm0808_permitted_speech chosen_speech_version; + + bool speech_codec_chosen_present; + struct gsm0808_speech_codec speech_codec_chosen; + + const struct sockaddr_storage *aoip_transport_layer; + + /* 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_ack2(const struct gsm0808_handover_request_ack *params); struct gsm0808_handover_command { const uint8_t *l3_info; -- cgit v1.2.3