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
diff --git a/include/osmocom/gsm/gsm0808.h b/include/osmocom/gsm/gsm0808.h
index 5b05dbc..93195b5 100644
--- a/include/osmocom/gsm/gsm0808.h
+++ b/include/osmocom/gsm/gsm0808.h
@@ -194,9 +194,29 @@
 };
 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;