diff options
author | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-09-04 16:37:14 +0200 |
---|---|---|
committer | Pau Espin Pedrol <pespin@sysmocom.de> | 2020-09-09 13:20:22 +0200 |
commit | 0632717dc186e679ae60e7eb2204766ab9993539 (patch) | |
tree | f38e1917562b664317c02484dc455baf58a4fd6f | |
parent | 047c5d9dc83fe547aae45feafd6c60736a715503 (diff) |
Support handling IPv6 Transport Address in Handover Request (Ack)
Change-Id: Ie4d07826362d651cd42dc2b4e0af82368a74c774
-rw-r--r-- | src/libmsc/ran_msg_a.c | 48 |
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) { |