pespin has submitted this change. ( 
https://gerrit.osmocom.org/c/osmo-mgw/+/39223?usp=email )

 (

2 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: mgw: Rename and cleanup code allocating rtp/rtcp ports in 
trunk
......................................................................

mgw: Rename and cleanup code allocating rtp/rtcp ports in trunk

Clean up pointers passed. Rename function since it's clearly operating
on trunk related fields through mutexes.

Change-Id: Ib894afcb61609c247883d5ccdd7b8fbf29b2cbf8
---
M include/osmocom/mgcp/mgcp_trunk.h
M src/libosmo-mgcp/mgcp_protocol.c
M src/libosmo-mgcp/mgcp_trunk.c
3 files changed, 45 insertions(+), 43 deletions(-)

Approvals:
  daniel: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved
  Jenkins Builder: Verified




diff --git a/include/osmocom/mgcp/mgcp_trunk.h 
b/include/osmocom/mgcp/mgcp_trunk.h
index 68d37dd..d36c004 100644
--- a/include/osmocom/mgcp/mgcp_trunk.h
+++ b/include/osmocom/mgcp/mgcp_trunk.h
@@ -2,9 +2,10 @@

 #include <osmocom/gsm/i460_mux.h>
 #include <osmocom/abis/e1_input.h>
+#include <osmocom/mgcp/mgcp_conn.h>
+#include <osmocom/mgcp/mgcp_network.h>
 #include <osmocom/mgcp/mgcp_ratectr.h>

-
 #define LOGPTRUNK(trunk, cat, level, fmt, args...) \
 LOGP(cat, level, "trunk:%u " fmt, \
      trunk ? trunk->trunk_nr : 0, \
@@ -78,6 +79,7 @@
 struct mgcp_trunk *mgcp_trunk_by_name(const struct mgcp_config *cfg, const 
char *epname);
 int e1_trunk_nr_from_epname(unsigned int *trunk_nr, const char *epname);
 struct mgcp_trunk *mgcp_trunk_by_line_num(const struct mgcp_config *cfg, 
unsigned int num);
+int mgcp_trunk_allocate_conn_rtp_ports(struct mgcp_trunk *trunk, struct 
mgcp_conn_rtp *conn_rtp);

 /* The virtual trunk is always created on trunk id 0 for historical reasons,
  * use this define constant as ID when allocating a virtual trunk. Other
diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index 3efa0e0..32fbd43 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -489,46 +489,6 @@
        return create_ok_response(rq->trunk, rq->endp, 200, "AUEP", 
rq->pdata->trans);
 }

-/* Try to find a free port by attempting to bind on it. Also handle the
- * counter that points on the next free port. Since we have a pointer
- * to the next free port, binding should in work on the first attempt in
- * general. In case of failure the next port is tried until the whole port
- * range is tried once. */
-static int allocate_port(struct mgcp_endpoint *endp, struct mgcp_conn_rtp 
*conn)
-{
-       int i;
-       struct mgcp_port_range *range;
-       unsigned int tries;
-
-       OSMO_ASSERT(conn);
-
-       range = &endp->trunk->cfg->net_ports;
-
-       pthread_mutex_lock(&range->lock);
-       /* attempt to find a port */
-       tries = (range->range_end - range->range_start) / 2;
-       for (i = 0; i < tries; ++i) {
-               int rc;
-
-               if (range->last_port >= range->range_end)
-                       range->last_port = range->range_start;
-
-               rc = mgcp_conn_rtp_bind_rtp_ports(conn, range->last_port);
-
-               range->last_port += 2;
-               if (rc == 0) {
-                       pthread_mutex_unlock(&range->lock);
-                       return 0;
-               }
-
-       }
-       pthread_mutex_unlock(&range->lock);
-       LOGPENDP(endp, DLMGCP, LOGL_ERROR,
-            "Allocating a RTP/RTCP port failed %u times.\n",
-            tries);
-       return -1;
-}
-
 /*! Helper function for check_local_cx_options() to get a pointer of the next
  *  lco option identifier
  *  \param[in] lco string
@@ -1077,7 +1037,7 @@
                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, 
MGCP_CRCX_FAIL_BIND_PORT));
                goto error2;
        }
-       if (allocate_port(endp, conn_rtp) != 0) {
+       if (mgcp_trunk_allocate_conn_rtp_ports(trunk, conn_rtp) != 0) {
                rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, 
MGCP_CRCX_FAIL_BIND_PORT));
                goto error2;
        }
@@ -1311,7 +1271,7 @@
        if (strcmp(new_local_addr, conn_rtp->end.local_addr)) {
                osmo_strlcpy(conn_rtp->end.local_addr, new_local_addr, 
sizeof(conn_rtp->end.local_addr));
                mgcp_rtp_end_free_port(&conn_rtp->end);
-               if (allocate_port(endp, conn_rtp) != 0) {
+               if (mgcp_trunk_allocate_conn_rtp_ports(trunk, conn_rtp) != 0) {
                        rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, 
MGCP_CRCX_FAIL_BIND_PORT));
                        goto error3;
                }
diff --git a/src/libosmo-mgcp/mgcp_trunk.c b/src/libosmo-mgcp/mgcp_trunk.c
index 69750f8..8359098 100644
--- a/src/libosmo-mgcp/mgcp_trunk.c
+++ b/src/libosmo-mgcp/mgcp_trunk.c
@@ -306,3 +306,43 @@

        return NULL;
 }
+
+/* Try to find a free port by attempting to bind on it. Also handle the
+ * counter that points on the next free port. Since we have a pointer
+ * to the next free port, binding should in work on the first attempt in
+ * general. In case of failure the next port is tried until the whole port
+ * range is tried once. */
+int mgcp_trunk_allocate_conn_rtp_ports(struct mgcp_trunk *trunk, struct 
mgcp_conn_rtp *conn_rtp)
+{
+       int i;
+       struct mgcp_port_range *range;
+       unsigned int tries;
+
+       OSMO_ASSERT(trunk);
+       OSMO_ASSERT(conn_rtp);
+
+       range = &trunk->cfg->net_ports;
+
+       pthread_mutex_lock(&range->lock);
+       /* attempt to find a port */
+       tries = (range->range_end - range->range_start) / 2;
+       for (i = 0; i < tries; ++i) {
+               int rc;
+
+               if (range->last_port >= range->range_end)
+                       range->last_port = range->range_start;
+
+               rc = mgcp_conn_rtp_bind_rtp_ports(conn_rtp, range->last_port);
+
+               range->last_port += 2;
+               if (rc == 0) {
+                       pthread_mutex_unlock(&range->lock);
+                       return 0;
+               }
+
+       }
+       pthread_mutex_unlock(&range->lock);
+       LOGPCONN(conn_rtp->conn, DLMGCP, LOGL_ERROR,
+                "Allocating a RTP/RTCP port failed %u times.\n", tries);
+       return -1;
+}

--
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/39223?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: Ib894afcb61609c247883d5ccdd7b8fbf29b2cbf8
Gerrit-Change-Number: 39223
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>

Reply via email to