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

Change subject: mgw: Delay osmux trunk setup to point where it is really needed
......................................................................

mgw: Delay osmux trunk setup to point where it is really needed

This way code is simplified by putting all osmux code together.

Change-Id: I27f7355ee99f1781fc2034a23c7cca756fb203d2
---
M src/libosmo-mgcp/mgcp_osmux.c
M src/libosmo-mgcp/mgcp_protocol.c
2 files changed, 17 insertions(+), 25 deletions(-)

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




diff --git a/src/libosmo-mgcp/mgcp_osmux.c b/src/libosmo-mgcp/mgcp_osmux.c
index 31f128a..620220f 100644
--- a/src/libosmo-mgcp/mgcp_osmux.c
+++ b/src/libosmo-mgcp/mgcp_osmux.c
@@ -495,6 +495,9 @@
        int ret, fd;
        struct mgcp_config *cfg = trunk->cfg;

+       if (cfg->osmux.initialized)
+               return 0;
+
        /* So far we only support running on one trunk: */
        OSMO_ASSERT(trunk == mgcp_trunk_by_num(cfg, MGCP_TRUNK_VIRTUAL, 
MGCP_VIRT_TRUNK_ID));

@@ -507,19 +510,19 @@
                ret = mgcp_create_bind(cfg->osmux.local_addr_v4, 
cfg->osmux.local_port,
                                        cfg->endp_dscp, cfg->endp_priority);
                if (ret < 0) {
-                       LOGP(DOSMUX, LOGL_ERROR, "Cannot bind OSMUX IPv4 socket 
to %s:%u\n",
-                            cfg->osmux.local_addr_v4, cfg->osmux.local_port);
+                       LOGPTRUNK(trunk, DOSMUX, LOGL_ERROR, "Cannot bind OSMUX 
IPv4 socket to %s:%u\n",
+                                 cfg->osmux.local_addr_v4, 
cfg->osmux.local_port);
                        goto out_free_v4;
                }
                fd = ret;

                ret = osmo_iofd_register(osmux_fd_v4, fd);
                if (ret < 0) {
-                       LOGP(DOSMUX, LOGL_ERROR, "Cannot register OSMUX IPv4 
socket %s\n", osmo_sock_get_name2(fd));
+                       LOGPTRUNK(trunk, DOSMUX, LOGL_ERROR, "Cannot register 
OSMUX IPv4 socket %s\n", osmo_sock_get_name2(fd));
                        close(fd);
                        goto out_free_v4;
                }
-               LOGP(DOSMUX, LOGL_INFO, "OSMUX IPv4 socket listening on %s\n", 
osmo_sock_get_name2(fd));
+               LOGPTRUNK(trunk, DOSMUX, LOGL_INFO, "OSMUX IPv4 socket 
listening on %s\n", osmo_sock_get_name2(fd));
        }

        osmux_fd_v6 = osmo_iofd_setup(trunk, -1, "osmux_fd_v6", 
OSMO_IO_FD_MODE_RECVFROM_SENDTO, &osmux_ioops, trunk);
@@ -531,8 +534,8 @@
                ret = mgcp_create_bind(cfg->osmux.local_addr_v6, 
cfg->osmux.local_port,
                                        cfg->endp_dscp, cfg->endp_priority);
                if (ret < 0) {
-                       LOGP(DOSMUX, LOGL_ERROR, "Cannot bind OSMUX IPv6 socket 
to [%s]:%u\n",
-                            cfg->osmux.local_addr_v6, cfg->osmux.local_port);
+                       LOGPTRUNK(trunk, DOSMUX, LOGL_ERROR, "Cannot bind OSMUX 
IPv6 socket to [%s]:%u\n",
+                                 cfg->osmux.local_addr_v6, 
cfg->osmux.local_port);
                        goto out_free_v6;
                }
                fd = ret;
@@ -543,9 +546,10 @@
                        close(fd);
                        goto out_free_v6;
                }
-               LOGP(DOSMUX, LOGL_INFO, "OSMUX IPv6 socket listening on %s\n", 
osmo_sock_get_name2(fd));
+               LOGPTRUNK(trunk, DOSMUX, LOGL_INFO, "OSMUX IPv6 socket 
listening on %s\n", osmo_sock_get_name2(fd));
        }
        cfg->osmux.initialized = true;
+       LOGPTRUNK(trunk, DOSMUX, LOGL_NOTICE, "OSMUX socket has been set up\n");
        return 0;

 out_free_v6:
@@ -557,6 +561,7 @@
        osmo_iofd_free(osmux_fd_v4);
        osmux_fd_v4 = NULL;
 out:
+       LOGPTRUNK(trunk, DOSMUX, LOGL_ERROR, "Cannot init OSMUX\n");
        return -1;
 }

diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c
index b985a1b..35d0811 100644
--- a/src/libosmo-mgcp/mgcp_protocol.c
+++ b/src/libosmo-mgcp/mgcp_protocol.c
@@ -702,20 +702,6 @@
            codec->frame_duration_den;
 }

-static int mgcp_trunk_osmux_init_if_needed(struct mgcp_trunk *trunk)
-{
-       if (trunk->cfg->osmux.initialized)
-               return 0;
-
-       if (osmux_init(trunk) < 0) {
-               LOGPTRUNK(trunk, DOSMUX, LOGL_ERROR, "Cannot init OSMUX\n");
-               return -3;
-       }
-       LOGPTRUNK(trunk, DOSMUX, LOGL_NOTICE, "OSMUX socket has been set up\n");
-
-       return 0;
-}
-
 /* Apply parsed SDP information stored in struct mgcp_parse_sdp to conn_rtp: */
 static int handle_sdp(struct mgcp_conn_rtp *conn, struct mgcp_request_data *rq)
 {
@@ -905,10 +891,6 @@
                return create_err_response(endp, endp, 517, "CRCX", 
pdata->trans);
        }

-       /* Make sure osmux is setup: */
-       if (hpars->remote_osmux_cid != MGCP_PARSE_HDR_PARS_OSMUX_CID_UNSET)
-               mgcp_trunk_osmux_init_if_needed(trunk);
-
        /* Check if we are able to accept the creation of another connection */
        if (mgcp_endp_is_full(endp)) {
                LOGPENDP(endp, DLMGCP, LOGL_ERROR,
@@ -990,6 +972,11 @@

        /* If X-Osmux (remote CID) was received, alloc next avail CID as local 
CID */
        if (hpars->remote_osmux_cid != MGCP_PARSE_HDR_PARS_OSMUX_CID_UNSET) {
+               /* Make sure osmux is setup: */
+               if (osmux_init(trunk) < 0) {
+                       rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, 
MGCP_CRCX_FAIL_NO_OSMUX));
+                       goto error2;
+               }
                if (osmux_init_conn(conn_rtp) < 0) {
                        rate_ctr_inc(rate_ctr_group_get_ctr(rate_ctrs, 
MGCP_CRCX_FAIL_NO_OSMUX));
                        goto error2;

--
To view, visit https://gerrit.osmocom.org/c/osmo-mgw/+/39716?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: I27f7355ee99f1781fc2034a23c7cca756fb203d2
Gerrit-Change-Number: 39716
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pes...@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <dwillm...@sysmocom.de>
Gerrit-Reviewer: fixeria <vyanits...@sysmocom.de>
Gerrit-Reviewer: osmith <osm...@sysmocom.de>
Gerrit-Reviewer: pespin <pes...@sysmocom.de>

Reply via email to