hnbgw: Allow announcing a different mgw-local IuUP address after MDCX

This will allow emulating an MGW deciding to change its local IuUP IP
address due to received remote address in MGCP MDCX, and announce the
changed address back in MGCP MDCX. A test validating this scenario
against osmo-hnbgw will be added in a follow-up patch.

Related: SYS#6657
Change-Id: Ia724e0363a8bab56f5d31e7f7f7a127af584f935
This commit is contained in:
Pau Espin 2023-11-29 16:00:35 +01:00
parent 264679fa7c
commit 0c35a6363b
1 changed files with 12 additions and 1 deletions

View File

@ -222,6 +222,8 @@ const RanOps MSC_RanOps := {
type record MgwResponse {
integer resp,
HostName mgw_rtp_ip,
/* if set, used after first received MDCX: */
HostName mgw_rtp_ip_mdcx optional,
PortNumber mgw_rtp_port,
MgcpConnectionId mgcp_connection_id
}
@ -250,12 +252,14 @@ template (value) MgcpParameters t_MgcpParams := {
mgw_conn_ran := {
resp := 1,
mgw_rtp_ip := "127.1.2.1",
mgw_rtp_ip_mdcx := omit,
mgw_rtp_port := 10000,
mgcp_connection_id := '11111'H
},
mgw_conn_cn := {
resp := 1,
mgw_rtp_ip := "127.1.2.2",
mgw_rtp_ip_mdcx := omit,
mgw_rtp_port := 20000,
mgcp_connection_id := '22222'H
},
@ -1271,9 +1275,16 @@ friend function f_rab_ass_resp(inout MgcpParameters pars) runs on ConnHdlr {
interleave {
/* Expect MDCX with IP/port from RAB Assignment Response */
[] MGCP.receive(tr_MDCX(tr_SDP(pars.hnb_rtp_ip, pars.hnb_rtp_port))) -> value mgcp_cmd {
var HostName mgw_rtp_ip;
log("MDCX1", mgcp_cmd);
if (ispresent(pars.mgw_conn_ran.mgw_rtp_ip_mdcx)) {
mgw_rtp_ip := pars.mgw_conn_ran.mgw_rtp_ip_mdcx;
} else {
mgw_rtp_ip := pars.mgw_conn_ran.mgw_rtp_ip;
}
/* Verify SDP of MDCX */
var SDP_Message sdp := valueof(ts_SDP(pars.mgw_conn_ran.mgw_rtp_ip, pars.mgw_conn_ran.mgw_rtp_ip, hex2str(pars.mgcp_call_id), "42", pars.mgw_conn_ran.mgw_rtp_port,
var SDP_Message sdp := valueof(ts_SDP(mgw_rtp_ip, mgw_rtp_ip, hex2str(pars.mgcp_call_id), "42", pars.mgw_conn_ran.mgw_rtp_port,
{ int2str(pars.rtp_payload_type) }, { valueof(ts_SDP_rtpmap(pars.rtp_payload_type, pars.rtp_sdp_format)), valueof(ts_SDP_ptime(20)) } ));
var template MgcpResponse mgcp_rsp := ts_MDCX_ACK(mgcp_cmd.line.trans_id, pars.mgw_conn_ran.mgcp_connection_id, sdp);
MGCP.send(valueof(mgcp_rsp));