aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPau Espin Pedrol <pespin@sysmocom.de>2020-09-04 16:37:14 +0200
committerPau Espin Pedrol <pespin@sysmocom.de>2020-09-09 13:20:22 +0200
commit0632717dc186e679ae60e7eb2204766ab9993539 (patch)
treef38e1917562b664317c02484dc455baf58a4fd6f
parent047c5d9dc83fe547aae45feafd6c60736a715503 (diff)
Support handling IPv6 Transport Address in Handover Request (Ack)
-rw-r--r--src/libmsc/ran_msg_a.c48
1 files changed, 14 insertions, 34 deletions
diff --git a/src/libmsc/ran_msg_a.c b/src/libmsc/ran_msg_a.c
index c859c2292..6a3370443 100644
--- a/src/libmsc/ran_msg_a.c
+++ b/src/libmsc/ran_msg_a.c
@@ -607,23 +607,13 @@ static int ran_a_decode_handover_request(struct ran_dec *ran_dec, const struct m
}
if (ie_aoip_transp_addr) {
- do {
- struct sockaddr_storage rtp_addr;
- if (gsm0808_dec_aoip_trasp_addr(&rtp_addr, ie_aoip_transp_addr->val, ie_aoip_transp_addr->len) < 0) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode AoIP transport address\n");
- break;
- }
- if (rtp_addr.ss_family != AF_INET) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "IE AoIP Transport Address:"
- " unsupported addressing scheme (only IPV4 supported)\n");
- break;
- }
- if (osmo_sockaddr_str_from_sockaddr_in(&rtp_ran_local, (struct sockaddr_in*)&rtp_addr)) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode remote RTP IP address\n");
- break;
- }
+ struct sockaddr_storage rtp_addr;
+ if (gsm0808_dec_aoip_trasp_addr(&rtp_addr, ie_aoip_transp_addr->val, ie_aoip_transp_addr->len) < 0)
+ LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode AoIP transport address\n");
+ else if (osmo_sockaddr_str_from_sockaddr(&rtp_ran_local, &rtp_addr) < 0)
+ LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode remote RTP IP address\n");
+ else
r->rtp_ran_local = &rtp_ran_local;
- } while(0);
}
if (ie_codec_list_msc_preferred
@@ -689,24 +679,14 @@ static int ran_a_decode_handover_request_ack(struct ran_dec *ran_dec, const stru
}
if (ie_aoip_transp_addr) {
- do {
- struct sockaddr_storage rtp_addr;
- if (gsm0808_dec_aoip_trasp_addr(&rtp_addr, ie_aoip_transp_addr->val, ie_aoip_transp_addr->len) < 0) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode AoIP transport address\n");
- break;
- }
- if (rtp_addr.ss_family != AF_INET) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "IE AoIP Transport Address:"
- " unsupported addressing scheme (only IPV4 supported)\n");
- break;
- }
- if (osmo_sockaddr_str_from_sockaddr_in(&ran_dec_msg.handover_request_ack.remote_rtp,
- (struct sockaddr_in*)&rtp_addr)) {
- LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode remote RTP IP address\n");
- ran_dec_msg.handover_request_ack.remote_rtp = (struct osmo_sockaddr_str){};
- break;
- }
- } while(0);
+ struct sockaddr_storage rtp_addr;
+ if (gsm0808_dec_aoip_trasp_addr(&rtp_addr, ie_aoip_transp_addr->val, ie_aoip_transp_addr->len) < 0) {
+ LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode AoIP transport address\n");
+ } else if (osmo_sockaddr_str_from_sockaddr(&ran_dec_msg.handover_request_ack.remote_rtp,
+ &rtp_addr)) {
+ LOG_RAN_A_DEC_MSG(LOGL_ERROR, "unable to decode remote RTP IP address\n");
+ ran_dec_msg.handover_request_ack.remote_rtp = (struct osmo_sockaddr_str){};
+ }
}
if (ie_speech_codec) {