pespin has submitted this change. (
https://gerrit.osmocom.org/c/osmo-mgw/+/39762?usp=email )
Change subject: mgw: iuup: Trigger Init on CN-side CRCX if RAN-side was already
initialized
......................................................................
mgw: iuup: Trigger Init on CN-side CRCX if RAN-side was already initialized
Prior to this patch, osmo-mgw would wait until first IuUP Data frame
would be received on RAN-side (from HNB) to trigger active
initialization (Tx IuUP-Init) on CN-side conn towards CN.
With this patch, this happens ASAP, whenever the CN-side conn is created
by HNBGW when it receives the RAB-ASS-RESP from HNB.
Related: OS#6685
Change-Id: Iab0af88852994e73bfe6c3b27fe196fd655cce03
---
M include/osmocom/mgcp/mgcp_iuup.h
M src/libosmo-mgcp/mgcp_endp.c
M src/libosmo-mgcp/mgcp_iuup.c
3 files changed, 44 insertions(+), 1 deletion(-)
Approvals:
osmith: Looks good to me, but someone else must approve
pespin: Looks good to me, approved
Jenkins Builder: Verified
laforge: Looks good to me, but someone else must approve
diff --git a/include/osmocom/mgcp/mgcp_iuup.h b/include/osmocom/mgcp/mgcp_iuup.h
index 4d2011f..f0af776 100644
--- a/include/osmocom/mgcp/mgcp_iuup.h
+++ b/include/osmocom/mgcp/mgcp_iuup.h
@@ -31,3 +31,4 @@
int mgcp_conn_iuup_dispatch_rtp(struct msgb *msg);
int mgcp_conn_iuup_send_rtp(struct mgcp_conn_rtp *conn_src_rtp, struct mgcp_conn_rtp
*conn_dest_rtp, struct msgb *msg);
int mgcp_conn_iuup_send_dummy(struct mgcp_conn_rtp *conn_rtp);
+int mgcp_conn_iuup_event_rx_crcx_mdcx(struct mgcp_conn_rtp *conn_rtp);
diff --git a/src/libosmo-mgcp/mgcp_endp.c b/src/libosmo-mgcp/mgcp_endp.c
index 324f67d..28ccd2f 100644
--- a/src/libosmo-mgcp/mgcp_endp.c
+++ b/src/libosmo-mgcp/mgcp_endp.c
@@ -24,6 +24,7 @@
#include <osmocom/mgcp/mgcp.h>
#include <osmocom/mgcp/mgcp_protocol.h>
#include <osmocom/mgcp/mgcp_conn.h>
+#include <osmocom/mgcp/mgcp_iuup.h>
#include <osmocom/mgcp/mgcp_endp.h>
#include <osmocom/mgcp/mgcp_trunk.h>
@@ -677,7 +678,7 @@
}
break;
case MGCP_RTP_IUUP:
- break;
+ return mgcp_conn_iuup_event_rx_crcx_mdcx(conn_rtp);
default:
return -523;
}
diff --git a/src/libosmo-mgcp/mgcp_iuup.c b/src/libosmo-mgcp/mgcp_iuup.c
index 468ea06..40ca100 100644
--- a/src/libosmo-mgcp/mgcp_iuup.c
+++ b/src/libosmo-mgcp/mgcp_iuup.c
@@ -753,3 +753,44 @@
return 0;
}
+
+/* To be called every time an CRCX/MDCX is received.
+ * returns: 0 if conn can continue, MGCP negative code if an error ocurred during setup
*/
+int mgcp_conn_iuup_event_rx_crcx_mdcx(struct mgcp_conn_rtp *conn_rtp)
+{
+ struct mgcp_conn *peer_conn;
+ struct mgcp_conn_rtp *peer_conn_rtp;
+ OSMO_ASSERT(mgcp_conn_rtp_is_iuup(conn_rtp));
+
+ /* keep waiting to receive remote address through CRCX/MDCX */
+ if (!mgcp_rtp_end_remote_addr_available(&conn_rtp->end))
+ return 0;
+
+ /* Conn already IuUP-configured/initialized, nothing to be done. */
+ if (conn_rtp->iuup.configured)
+ return 0;
+
+ /* Reached this point, conn_rtp is an IuUP conn which can be configured
+ * and was not yet configured. If its sister conn in the endpoint was
+ * already configured as IuUP "passive", then we know this one can be
+ * configured as IuUP "active" right now. In that case, do so.
+ * This usually happens on an HNBGW co-located MGW, where during
+ * RAB-ASS-REQ the RAN-side conn (sister conn here) was already
+ * configured and then upon rx of RAB-ASS-RESP it sets up (CRCX) the
+ * CN-side IuUP conn (rt_conn here).
+ */
+ peer_conn = mgcp_find_dst_conn(conn_rtp->conn);
+ /* No peer conn yet, nothing to be done. */
+ if (!peer_conn)
+ return 0;
+ peer_conn_rtp = mgcp_conn_get_conn_rtp(peer_conn);
+
+ if (mgcp_conn_rtp_is_iuup(peer_conn_rtp) &&
+ peer_conn_rtp->iuup.configured &&
+ !conn_rtp->iuup.active_init) {
+ LOG_CONN_RTP(conn_rtp, LOGL_INFO, "Sister IuUP conn in endp configured as passive,
init this one as active\n");
+ OSMO_ASSERT(peer_conn_rtp->iuup.init_ind);
+ _conn_iuup_configure_as_active(conn_rtp, peer_conn_rtp->iuup.init_ind);
+ }
+ return 0;
+}
--
To view, visit
https://gerrit.osmocom.org/c/osmo-mgw/+/39762?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: merged
Gerrit-Project: osmo-mgw
Gerrit-Branch: master
Gerrit-Change-Id: Iab0af88852994e73bfe6c3b27fe196fd655cce03
Gerrit-Change-Number: 39762
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <pespin(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>