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 <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to