<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25335">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">mgcp_client: add MGW name as logging context<br><br>Usually only one MGCP client per application is present. Then the log<br>lines from mgcp_client.c will be distinguishable without additional<br>information. When the application is using a pool of MGWs, then the<br>various MGCP Client instances become hard to distinguish.<br><br>- Add a possibility to set a description (name) for each MGW pool<br>  member. When no description is set, use the domain name.<br><br>- Output the pool member name on each log line in mgcp_client.c<br>  and mgcp_client_pool.c<br><br>Change-Id: I53ff5445c8e5faffa4ef908ffb1fdb1f47ea2904<br>Related: SYS#5091<br>---<br>M include/osmocom/mgcp_client/mgcp_client.h<br>M include/osmocom/mgcp_client/mgcp_client_pool_internal.h<br>M src/libosmo-mgcp-client/mgcp_client.c<br>M src/libosmo-mgcp-client/mgcp_client_pool.c<br>M src/libosmo-mgcp-client/mgcp_client_vty.c<br>5 files changed, 165 insertions(+), 96 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/35/25335/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp_client/mgcp_client.h b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>index 4d162d0..0405175 100644</span><br><span>--- a/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>+++ b/include/osmocom/mgcp_client/mgcp_client.h</span><br><span>@@ -32,6 +32,9 @@</span><br><span>      * 'rtpbridge/(wildcard)' or a number of specific E1 like e.g.</span><br><span>        * 'ds/e1-0/s-3/su16-4' */</span><br><span>   struct llist_head reset_epnames;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    /* human readable name / description */</span><br><span style="color: hsl(120, 100%, 40%);">+       char *description;</span><br><span> };</span><br><span> </span><br><span> typedef unsigned int mgcp_trans_id_t;</span><br><span>@@ -173,3 +176,5 @@</span><br><span>                       enum mgcp_codecs codec);</span><br><span> enum mgcp_codecs map_pt_to_codec(struct ptmap *ptmap, unsigned int ptmap_len,</span><br><span>                                unsigned int pt);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const char *mgcp_client_name(const struct mgcp_client *mgcp);</span><br><span>diff --git a/include/osmocom/mgcp_client/mgcp_client_pool_internal.h b/include/osmocom/mgcp_client/mgcp_client_pool_internal.h</span><br><span>index c58ec02..95f5525 100644</span><br><span>--- a/include/osmocom/mgcp_client/mgcp_client_pool_internal.h</span><br><span>+++ b/include/osmocom/mgcp_client/mgcp_client_pool_internal.h</span><br><span>@@ -41,3 +41,5 @@</span><br><span>     /* VTY node specification used with this pool. This field is populated by mgcp_client_pool_vty_init() */</span><br><span>     struct cmd_node *vty_node;</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+const char *mgcp_client_pool_member_name(const struct mgcp_client_pool_member *pool_member);</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client.c b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>index 2bed90f..5945459 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client.c</span><br><span>@@ -46,6 +46,9 @@</span><br><span> #define OSMUX_CID_MAX 255 /* FIXME: use OSMUX_CID_MAX from libosmo-netif? */</span><br><span> #endif</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGPMGW(mgcp, level, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+LOGP(DLMGCP, level, "MGW(%s) " fmt, mgcp_client_name(mgcp), ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Codec descripton for dynamic payload types (SDP) */</span><br><span> const struct value_string osmo_mgcpc_codec_names[] = {</span><br><span>      { CODEC_PCMU_8000_1, "PCMU/8000/1" },</span><br><span>@@ -209,14 +212,13 @@</span><br><span>                                      struct mgcp_response *response)</span><br><span> {</span><br><span>         if (!pending) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Cannot handle NULL response\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPMGW(mgcp, LOGL_ERROR, "Cannot handle NULL response\n");</span><br><span>                return;</span><br><span>      }</span><br><span>    if (pending->response_cb)</span><br><span>                 pending->response_cb(response, pending->priv);</span><br><span>         else</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLMGCP, LOGL_DEBUG, "MGCP response ignored (NULL cb)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPMGW(mgcp, LOGL_DEBUG, "MGCP response ignored (NULL cb)\n");</span><br><span>    talloc_free(pending);</span><br><span> }</span><br><span> </span><br><span>@@ -673,26 +675,25 @@</span><br><span> </span><br><span>   rc = mgcp_response_parse_head(r, msg);</span><br><span>       if (rc) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_ERROR, "Cannot parse MGCP response (head)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPMGW(mgcp, LOGL_ERROR, "Cannot parse MGCP response (head)\n");</span><br><span>          rc = 1;</span><br><span>              goto error;</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   LOGP(DLMGCP, LOGL_DEBUG, "MGCP client: Rx %d %u %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGPMGW(mgcp, LOGL_DEBUG, "MGCP client: Rx %d %u %s\n",</span><br><span>         r->head.response_code, r->head.trans_id, r->head.comment);</span><br><span> </span><br><span>         rc = parse_head_params(r);</span><br><span>   if (rc) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_ERROR, "Cannot parse MGCP response (head parameters)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPMGW(mgcp, LOGL_ERROR, "Cannot parse MGCP response (head parameters)\n");</span><br><span>               rc = 1;</span><br><span>              goto error;</span><br><span>  }</span><br><span> </span><br><span>        pending = mgcp_client_response_pending_get(mgcp, r->head.trans_id);</span><br><span>       if (!pending) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Cannot find matching MGCP transaction for trans_id %d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    r->head.trans_id);</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPMGW(mgcp, LOGL_ERROR, "Cannot find matching MGCP transaction for trans_id %d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        r->head.trans_id);</span><br><span>                rc = -ENOENT;</span><br><span>                goto error;</span><br><span>  }</span><br><span>@@ -713,19 +714,19 @@</span><br><span> </span><br><span>        msg = msgb_alloc_headroom(4096, 128, "mgcp_from_gw");</span><br><span>      if (!msg) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLMGCP, LOGL_ERROR, "Failed to allocate MGCP message.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPMGW(mgcp, LOGL_ERROR, "Failed to allocate MGCP message.\n");</span><br><span>           return -1;</span><br><span>   }</span><br><span> </span><br><span>        ret = read(fd->fd, msg->data, 4096 - 128);</span><br><span>     if (ret <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGP(DLMGCP, LOGL_ERROR, "Failed to read: %s: %d='%s'\n", osmo_sock_get_name2(fd->fd),</span><br><span style="color: hsl(0, 100%, 40%);">-                  errno, strerror(errno));</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGPMGW(mgcp, LOGL_ERROR, "Failed to read: %s: %d='%s'\n",</span><br><span style="color: hsl(120, 100%, 40%);">+               osmo_sock_get_name2(fd->fd), errno, strerror(errno));</span><br><span> </span><br><span>            msgb_free(msg);</span><br><span>              return -1;</span><br><span>   } else if (ret > 4096 - 128) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_ERROR, "Too much data: %s: %d\n", osmo_sock_get_name2(fd->fd), ret);</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPMGW(mgcp, LOGL_ERROR, "Too much data: %s: %d\n", osmo_sock_get_name2(fd->fd), ret);</span><br><span>                 msgb_free(msg);</span><br><span>              return -1;</span><br><span>   }</span><br><span>@@ -739,15 +740,17 @@</span><br><span> static int mgcp_do_write(struct osmo_fd *fd, struct msgb *msg)</span><br><span> {</span><br><span>     int ret;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct mgcp_client *mgcp = fd->data;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DLMGCP, LOGL_DEBUG, "Tx MGCP: %s: len=%u '%s'...\n",</span><br><span style="color: hsl(0, 100%, 40%);">-          osmo_sock_get_name2(fd->fd), msg->len, osmo_escape_str((const char*)msg->data, OSMO_MIN(42, msg->len)));</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGPMGW(mgcp, LOGL_DEBUG, "Tx MGCP: %s: len=%u '%s'...\n",</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_sock_get_name2(fd->fd), msg->len,</span><br><span style="color: hsl(120, 100%, 40%);">+          osmo_escape_str((const char*)msg->data,OSMO_MIN(42, msg->len)));</span><br><span> </span><br><span>   ret = write(fd->fd, msg->data, msg->len);</span><br><span>   if (ret != msg->len)</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLMGCP, LOGL_ERROR, "Failed to Tx MGCP: %s: %d='%s'; msg: len=%u '%s'...\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  osmo_sock_get_name2(fd->fd), errno, strerror(errno),</span><br><span style="color: hsl(0, 100%, 40%);">-                 msg->len, osmo_escape_str((const char*)msg->data, OSMO_MIN(42, msg->len)));</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPMGW(mgcp, LOGL_ERROR, "Failed to Tx MGCP: %s: %d='%s'; msg: len=%u '%s'...\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  osmo_sock_get_name2(fd->fd), errno, strerror(errno),</span><br><span style="color: hsl(120, 100%, 40%);">+                       msg->len, osmo_escape_str((const char*)msg->data, OSMO_MIN(42, msg->len)));</span><br><span>         return ret;</span><br><span> }</span><br><span> </span><br><span>@@ -780,12 +783,12 @@</span><br><span>         if (osmo_strlcpy(mgcp->actual.endpoint_domain_name, conf->endpoint_domain_name,</span><br><span>                         sizeof(mgcp->actual.endpoint_domain_name))</span><br><span>           >= sizeof(mgcp->actual.endpoint_domain_name)) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_ERROR, "MGCP client: endpoint domain name is too long, max length is %zu: '%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-               sizeof(mgcp->actual.endpoint_domain_name) - 1, conf->endpoint_domain_name);</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPMGW(mgcp, LOGL_ERROR, "MGCP client: endpoint domain name is too long, max length is %zu: '%s'\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                       sizeof(mgcp->actual.endpoint_domain_name) - 1, conf->endpoint_domain_name);</span><br><span>            talloc_free(mgcp);</span><br><span>           return NULL;</span><br><span>         }</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGP(DLMGCP, LOGL_NOTICE, "MGCP client: using endpoint domain '@%s'\n", mgcp_client_endpoint_domain(mgcp));</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGPMGW(mgcp, LOGL_NOTICE, "MGCP client: using endpoint domain '@%s'\n", mgcp_client_endpoint_domain(mgcp));</span><br><span> </span><br><span>   INIT_LLIST_HEAD(&mgcp->actual.reset_epnames);</span><br><span>         llist_for_each_entry(reset_ep, &conf->reset_epnames, list) {</span><br><span>@@ -793,6 +796,9 @@</span><br><span>            llist_add_tail(&actual_reset_ep->list, &mgcp->actual.reset_epnames);</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (conf->description)</span><br><span style="color: hsl(120, 100%, 40%);">+             mgcp->actual.description = talloc_strdup(mgcp, conf->description);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   return mgcp;</span><br><span> }</span><br><span> </span><br><span>@@ -821,21 +827,21 @@</span><br><span> </span><br><span>            if (i == retry_n_ports) {</span><br><span>                    /* Last try failed */</span><br><span style="color: hsl(0, 100%, 40%);">-                   LOGP(DLMGCP, LOGL_NOTICE, "MGCPGW failed to bind to %s:%d -- check configuration!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                       LOGPMGW(mgcp, LOGL_NOTICE, "Failed to bind to %s:%d -- check configuration!\n",</span><br><span>                         mgcp->actual.local_addr ? mgcp->actual.local_addr : "(any)", mgcp->actual.local_port);</span><br><span>                       if (retry_n_ports == 0)</span><br><span>                              return -EINVAL;</span><br><span>              } else {</span><br><span>                     /* Choose a new port number to try next */</span><br><span style="color: hsl(0, 100%, 40%);">-                      LOGP(DLMGCP, LOGL_NOTICE,</span><br><span style="color: hsl(0, 100%, 40%);">-                            "MGCPGW failed to bind to %s:%d, retrying with port %d -- check configuration!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGPMGW(mgcp, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+                         "Failed to bind to %s:%d, retrying with port %d -- check configuration!\n",</span><br><span>                        mgcp->actual.local_addr ? mgcp->actual.local_addr : "(any)", mgcp->actual.local_port,</span><br><span>                             mgcp->actual.local_port + 1);</span><br><span>                        mgcp->actual.local_port++;</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   LOGP(DLMGCP, LOGL_FATAL, "MGCPGW failed to find a port to bind on %u times -- check configuration!\n", i);</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGPMGW(mgcp, LOGL_FATAL, "Failed to find a port to bind on %u times -- check configuration!\n", i);</span><br><span>       return -EINVAL;</span><br><span> }</span><br><span> </span><br><span>@@ -862,12 +868,12 @@</span><br><span> </span><br><span>         rc = snprintf(endpoint, sizeof(endpoint), "%s@%s", name, mgcp_client_endpoint_domain(mgcp));</span><br><span>       if (rc > sizeof(endpoint) - 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLMGCP, LOGL_ERROR, "MGCP endpoint exceeds maximum length of %zu: '%s@%s'\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                 sizeof(endpoint) - 1, name, mgcp_client_endpoint_domain(mgcp));</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGPMGW(mgcp, LOGL_ERROR, "MGCP endpoint exceeds maximum length of %zu: '%s@%s'\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 sizeof(endpoint) - 1, name, mgcp_client_endpoint_domain(mgcp));</span><br><span>              return NULL;</span><br><span>         }</span><br><span>    if (rc < 1) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR, "Cannot compose MGCP endpoint name\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPMGW(mgcp, LOGL_ERROR, "Cannot compose MGCP endpoint name\n");</span><br><span>          return NULL;</span><br><span>         }</span><br><span>    return endpoint;</span><br><span>@@ -885,7 +891,7 @@</span><br><span>       const char *epname;</span><br><span> </span><br><span>      if (!mgcp) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLMGCP, LOGL_FATAL, "MGCPGW client not initialized properly\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGPMGW(mgcp, LOGL_FATAL, "Client not initialized properly\n");</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span>@@ -898,21 +904,21 @@</span><br><span> </span><br><span>    rc = init_socket(mgcp, retry_n_ports);</span><br><span>       if (rc < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_FATAL,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Failed to initialize socket %s:%u -> %s:%u for MGCP GW: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPMGW(mgcp, LOGL_FATAL,</span><br><span style="color: hsl(120, 100%, 40%);">+                  "Failed to initialize socket %s:%u -> %s:%u for MGW: %s\n",</span><br><span>                     mgcp->actual.local_addr ? mgcp->actual.local_addr : "(any)", mgcp->actual.local_port,</span><br><span>                     mgcp->actual.remote_addr ? mgcp->actual.local_addr : "(any)", mgcp->actual.remote_port,</span><br><span>                   strerror(errno));</span><br><span>               goto error_close_fd;</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   LOGP(DLMGCP, LOGL_INFO, "MGCP GW connection: %s\n", osmo_sock_get_name2(wq->bfd.fd));</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGPMGW(mgcp, LOGL_INFO, "MGW connection: %s\n", osmo_sock_get_name2(wq->bfd.fd));</span><br><span> </span><br><span>  /* If configured, send a DLCX message to the endpoints that are configured to</span><br><span>         * be reset on startup. Usually this is a wildcarded endpoint. */</span><br><span>    llist_for_each_entry(reset_ep, &mgcp->actual.reset_epnames, list) {</span><br><span>           epname = _mgcp_client_name_append_domain(mgcp, reset_ep->name);</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGP(DLMGCP, LOGL_INFO, "MGCP GW sending DLCX to: %s\n", epname);</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPMGW(mgcp, LOGL_INFO, "Sending DLCX to: %s\n", epname);</span><br><span>                 _mgcp_client_send_dlcx(mgcp, epname);</span><br><span>        }</span><br><span>    return 0;</span><br><span>@@ -938,13 +944,13 @@</span><br><span>    struct osmo_wqueue *wq;</span><br><span> </span><br><span>  if (!mgcp) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLMGCP, LOGL_FATAL, "MGCPGW client not initialized properly\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGP(DLMGCP, LOGL_FATAL, "MGCP client not initialized properly\n");</span><br><span>                return;</span><br><span>      }</span><br><span> </span><br><span>        wq = &mgcp->wq;</span><br><span>       osmo_wqueue_clear(wq);</span><br><span style="color: hsl(0, 100%, 40%);">-  LOGP(DLMGCP, LOGL_INFO, "MGCP GW connection: %s -- closed!\n", osmo_sock_get_name2(wq->bfd.fd));</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGPMGW(mgcp, LOGL_INFO, "MGCP association: %s -- closed!\n", osmo_sock_get_name2(wq->bfd.fd));</span><br><span>         close(wq->bfd.fd);</span><br><span>        wq->bfd.fd = -1;</span><br><span>  if (osmo_fd_is_registered(&wq->bfd))</span><br><span>@@ -1014,7 +1020,7 @@</span><br><span>      talloc_asprintf(ctx, "ds/e1-%u/s-%u/su%u-%u@%s", trunk_id, ts, rate, offset,</span><br><span>                       mgcp_client_endpoint_domain(mgcp));</span><br><span>      if (!epname) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLMGCP, LOGL_ERROR, "Cannot compose MGCP e1-endpoint name!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPMGW(mgcp, LOGL_ERROR, "Cannot compose MGCP e1-endpoint name!\n");</span><br><span>              return NULL;</span><br><span>         }</span><br><span> </span><br><span>@@ -1024,9 +1030,9 @@</span><br><span>                        rate_offs_valid = true;</span><br><span>      }</span><br><span>    if (!rate_offs_valid) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Cannot compose MGCP e1-endpoint name (%s), rate(%u)/offset(%u) combination is invalid!\n", epname,</span><br><span style="color: hsl(0, 100%, 40%);">-                   rate, offset);</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Cannot compose MGCP e1-endpoint name (%s), rate(%u)/offset(%u) combination is invalid!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 epname, rate, offset);</span><br><span>               talloc_free(epname);</span><br><span>                 return NULL;</span><br><span>         }</span><br><span>@@ -1034,8 +1040,9 @@</span><br><span>    /* An E1 line has a maximum of 32 timeslots, while the first (ts=0) is</span><br><span>        * reserverd for framing and alignment, so we can not use it here. */</span><br><span>        if (ts == 0 || ts > NUM_E1_TS-1) {</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Cannot compose MGCP e1-endpoint name (%s), E1-timeslot number (%u) is invalid!\n", epname, ts);</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Cannot compose MGCP e1-endpoint name (%s), E1-timeslot number (%u) is invalid!\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 epname, ts);</span><br><span>                 talloc_free(epname);</span><br><span>                 return NULL;</span><br><span>         }</span><br><span>@@ -1063,7 +1070,7 @@</span><br><span>    return pending;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/* Send the MGCP message in msg to the MGCP GW and handle a response with</span><br><span style="color: hsl(120, 100%, 40%);">+/* Send the MGCP message in msg to the MGW and handle a response with</span><br><span>  * response_cb. NOTE: the response_cb still needs to call</span><br><span>  * mgcp_response_parse_params(response) to get the parsed parameters -- to</span><br><span>  * potentially save some CPU cycles, only the head line has been parsed when</span><br><span>@@ -1080,8 +1087,8 @@</span><br><span> </span><br><span>      trans_id = msg->cb[MSGB_CB_MGCP_TRANS_ID];</span><br><span>        if (!trans_id) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Unset transaction id in mgcp send request\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Unset transaction id in mgcp send request\n");</span><br><span>            talloc_free(msg);</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span>@@ -1096,9 +1103,9 @@</span><br><span>    }</span><br><span> </span><br><span>        if (msgb_l2len(msg) > 4096) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Cannot send, MGCP message too large: %u\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Cannot send, MGCP message too large: %u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        msgb_l2len(msg));</span><br><span>            msgb_free(msg);</span><br><span>              rc = -EINVAL;</span><br><span>                goto mgcp_tx_error;</span><br><span>@@ -1106,12 +1113,12 @@</span><br><span> </span><br><span>    rc = osmo_wqueue_enqueue(&mgcp->wq, msg);</span><br><span>     if (rc) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_FATAL, "Could not queue message to MGCP GW\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPMGW(mgcp, LOGL_FATAL, "Could not queue message to MGW\n");</span><br><span>             msgb_free(msg);</span><br><span>              goto mgcp_tx_error;</span><br><span>  } else</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLMGCP, LOGL_DEBUG, "Queued %u bytes for MGCP GW\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  msgb_l2len(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGPMGW(mgcp, LOGL_DEBUG, "Queued %u bytes for MGW\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                      msgb_l2len(msg));</span><br><span>    return 0;</span><br><span> </span><br><span> mgcp_tx_error:</span><br><span>@@ -1138,10 +1145,10 @@</span><br><span>    struct mgcp_response_pending *pending = mgcp_client_response_pending_get(mgcp, trans_id);</span><br><span>    if (!pending) {</span><br><span>              /*! Note: it is not harmful to cancel a transaction twice. */</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGP(DLMGCP, LOGL_ERROR, "Cannot cancel, no such transaction: %u\n", trans_id);</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPMGW(mgcp, LOGL_ERROR, "Cannot cancel, no such transaction: %u\n", trans_id);</span><br><span>           return -ENOENT;</span><br><span>      }</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGP(DLMGCP, LOGL_DEBUG, "Canceled transaction %u\n", trans_id);</span><br><span style="color: hsl(120, 100%, 40%);">+    LOGPMGW(mgcp, LOGL_DEBUG, "Canceled transaction %u\n", trans_id);</span><br><span>  talloc_free(pending);</span><br><span>        return 0;</span><br><span>    /*! We don't really need to clean up the wqueue: In all sane cases, the msgb has already been sent</span><br><span>@@ -1233,8 +1240,8 @@</span><br><span> </span><br><span>   /* Determine local IP-Address */</span><br><span>     if (osmo_sock_local_ip(local_ip, mgcp->actual.remote_addr) < 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-         LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Could not determine local IP-Address!\n");</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Could not determine local IP-Address!\n");</span><br><span>                msgb_free(msg);</span><br><span>              return -EINVAL;</span><br><span>      }</span><br><span>@@ -1259,14 +1266,14 @@</span><br><span> </span><br><span>      /* Add RTP address and port */</span><br><span>       if (mgcp_msg->audio_port == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Invalid port number, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Invalid port number, can not generate MGCP message\n");</span><br><span>           msgb_free(msg);</span><br><span>              return -EINVAL;</span><br><span>      }</span><br><span>    if (strlen(mgcp_msg->audio_ip) <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Empty ip address, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "Empty ip address, can not generate MGCP message\n");</span><br><span>              msgb_free(msg);</span><br><span>              return -EINVAL;</span><br><span>      }</span><br><span>@@ -1323,8 +1330,7 @@</span><br><span>            rc |= msgb_printf(msg, "a=ptime:%u\r\n", mgcp_msg->ptime);</span><br><span> </span><br><span>  if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "message buffer to small, can not generate MGCP message (SDP)\n");</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPMGW(mgcp, LOGL_ERROR, "Message buffer to small, can not generate MGCP message (SDP)\n");</span><br><span>               msgb_free(msg);</span><br><span>              return -ENOBUFS;</span><br><span>     }</span><br><span>@@ -1371,16 +1377,15 @@</span><br><span>          rc |= msgb_printf(msg, "RSIP %u", trans_id);</span><br><span>               break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "Invalid command verb, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPMGW(mgcp, LOGL_ERROR, "Invalid command verb, can not generate MGCP message\n");</span><br><span>                msgb_free(msg);</span><br><span>              return NULL;</span><br><span>         }</span><br><span> </span><br><span>        /* Check if mandatory fields are missing */</span><br><span>  if (!((mgcp_msg->presence & mandatory_mask) == mandatory_mask)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "One or more missing mandatory fields, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                     "One or more missing mandatory fields, can not generate MGCP message\n");</span><br><span>          msgb_free(msg);</span><br><span>              return NULL;</span><br><span>         }</span><br><span>@@ -1388,16 +1393,15 @@</span><br><span>  /* Add endpoint name */</span><br><span>      if (mgcp_msg->presence & MGCP_MSG_PRESENCE_ENDPOINT) {</span><br><span>                if (strlen(mgcp_msg->endpoint) <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                             "Empty endpoint name, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                       LOGPMGW(mgcp, LOGL_ERROR, "Empty endpoint name, can not generate MGCP message\n");</span><br><span>                         msgb_free(msg);</span><br><span>                      return NULL;</span><br><span>                 }</span><br><span> </span><br><span>                if (strstr(mgcp_msg->endpoint, "@") == NULL) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                             "Endpoint name (%s) lacks separator (@), can not generate MGCP message\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                            mgcp_msg->endpoint);</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPMGW(mgcp, LOGL_ERROR,</span><br><span style="color: hsl(120, 100%, 40%);">+                             "Endpoint name (%s) lacks separator (@), can not generate MGCP message\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                          mgcp_msg->endpoint);</span><br><span>                      msgb_free(msg);</span><br><span>                      return NULL;</span><br><span>                 }</span><br><span>@@ -1415,8 +1419,7 @@</span><br><span>    /* Add connection id */</span><br><span>      if (mgcp_msg->presence & MGCP_MSG_PRESENCE_CONN_ID) {</span><br><span>                 if (strlen(mgcp_msg->conn_id) <= 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                             "Empty connection id, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+                       LOGPMGW(mgcp, LOGL_ERROR, "Empty connection id, can not generate MGCP message\n");</span><br><span>                         msgb_free(msg);</span><br><span>                      return NULL;</span><br><span>                 }</span><br><span>@@ -1453,9 +1456,8 @@</span><br><span>    /* Add X-Osmo-Osmux */</span><br><span>       if ((mgcp_msg->presence & MGCP_MSG_PRESENCE_X_OSMO_OSMUX_CID)) {</span><br><span>              if (mgcp_msg->x_osmo_osmux_cid < -1 || mgcp_msg->x_osmo_osmux_cid > OSMUX_CID_MAX) {</span><br><span style="color: hsl(0, 100%, 40%);">-                        LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                             "Wrong Osmux CID %d, can not generate MGCP message\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                        mgcp_msg->x_osmo_osmux_cid);</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGPMGW(mgcp, LOGL_ERROR, "Wrong Osmux CID %d, can not generate MGCP message\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                            mgcp_msg->x_osmo_osmux_cid);</span><br><span>                      msgb_free(msg);</span><br><span>                      return NULL;</span><br><span>                 }</span><br><span>@@ -1475,8 +1477,7 @@</span><br><span>    }</span><br><span> </span><br><span>        if (rc != 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLMGCP, LOGL_ERROR,</span><br><span style="color: hsl(0, 100%, 40%);">-                     "message buffer to small, can not generate MGCP message\n");</span><br><span style="color: hsl(120, 100%, 40%);">+           LOGPMGW(mgcp, LOGL_ERROR, "Message buffer to small, can not generate MGCP message\n");</span><br><span>             msgb_free(msg);</span><br><span>              msg = NULL;</span><br><span>  }</span><br><span>@@ -1508,3 +1509,22 @@</span><br><span>   { MGCP_CONN_LOOPBACK, "loopback" },</span><br><span>        { 0, NULL }</span><br><span> };</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/*! Get MGCP client instance mame (VTY).</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] mgcp MGCP client descriptor.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns MGCP client name.</span><br><span style="color: hsl(120, 100%, 40%);">+ * </span><br><span style="color: hsl(120, 100%, 40%);">+ *  The user can only modify the name of an MGCP client instance when it is</span><br><span style="color: hsl(120, 100%, 40%);">+ *  part of a pool. For single MGCP client instances and MGCP client instance</span><br><span style="color: hsl(120, 100%, 40%);">+ *  where no description is set via the VTY, the MGW domain name will be used</span><br><span style="color: hsl(120, 100%, 40%);">+ *  as name. */</span><br><span style="color: hsl(120, 100%, 40%);">+const char *mgcp_client_name(const struct mgcp_client *mgcp)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!mgcp)</span><br><span style="color: hsl(120, 100%, 40%);">+            return "(null)";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  if (mgcp->actual.description)</span><br><span style="color: hsl(120, 100%, 40%);">+              return mgcp->actual.description;</span><br><span style="color: hsl(120, 100%, 40%);">+   else</span><br><span style="color: hsl(120, 100%, 40%);">+          return mgcp_client_endpoint_domain(mgcp);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client_pool.c b/src/libosmo-mgcp-client/mgcp_client_pool.c</span><br><span>index 9311ac9..b61319d 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client_pool.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client_pool.c</span><br><span>@@ -24,6 +24,38 @@</span><br><span> #include <osmocom/mgcp_client/mgcp_client_pool.h></span><br><span> #include <stddef.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGPPMGW(pool_member, level, fmt, args...) \</span><br><span style="color: hsl(120, 100%, 40%);">+LOGP(DLMGCP, level, "MGW-pool(%s) " fmt, mgcp_client_pool_member_name(pool_member), ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Get a human readable name for a given pool member. */</span><br><span style="color: hsl(120, 100%, 40%);">+const char *mgcp_client_pool_member_name(const struct mgcp_client_pool_member *pool_member)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+  const struct mgcp_client *mpcp_client;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct mgcp_client mpcp_client_dummy;</span><br><span style="color: hsl(120, 100%, 40%);">+ static char name[512];</span><br><span style="color: hsl(120, 100%, 40%);">+        const char *description;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (!pool_member)</span><br><span style="color: hsl(120, 100%, 40%);">+             return "(null)";</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+  /* It is not guranteed that a pool_member has an MGCP client. The client may not yet be initialzed or the</span><br><span style="color: hsl(120, 100%, 40%);">+      * initalization may have been failed. In this case we will generate a dummy MGCP client to work with. */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!pool_member->client) {</span><br><span style="color: hsl(120, 100%, 40%);">+                memcpy(&mpcp_client_dummy.actual, &pool_member->conf, sizeof(mpcp_client_dummy.actual));</span><br><span style="color: hsl(120, 100%, 40%);">+           mpcp_client = &mpcp_client_dummy;</span><br><span style="color: hsl(120, 100%, 40%);">+ } else {</span><br><span style="color: hsl(120, 100%, 40%);">+              mpcp_client = pool_member->client;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   if (mpcp_client->actual.description)</span><br><span style="color: hsl(120, 100%, 40%);">+               description = mpcp_client->actual.description;</span><br><span style="color: hsl(120, 100%, 40%);">+     else</span><br><span style="color: hsl(120, 100%, 40%);">+          description = mgcp_client_endpoint_domain(mpcp_client);</span><br><span style="color: hsl(120, 100%, 40%);">+       snprintf(name, sizeof(name), "%i:%s", pool_member->nr, description);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   return name;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Allocate MGCP client pool. This is called once on startup and before the pool is used with</span><br><span>  *  mgcp_client_pool_vty_init(). Since the pool is linked with the VTY it must exist througout the entire runtime.</span><br><span>  *  \param[in] talloc_ctx talloc context. */</span><br><span>@@ -53,7 +85,7 @@</span><br><span>                /* Initialize client */</span><br><span>              pool_member->client = mgcp_client_init(pool_member, &pool_member->conf);</span><br><span>           if (!pool_member->client) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  LOGP(DLMGCP, LOGL_ERROR, "MGW %u initialization failed\n", pool_member->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGPPMGW(pool_member, LOGL_ERROR, "MGCP client initialization failed\n");</span><br><span>                  continue;</span><br><span>            }</span><br><span> </span><br><span>@@ -63,8 +95,8 @@</span><br><span> </span><br><span>                /* Connect client */</span><br><span>                 if (mgcp_client_connect2(pool_member->client, 0)) {</span><br><span style="color: hsl(0, 100%, 40%);">-                  LOGP(DLMGCP, LOGL_ERROR, "MGW %u connect failed at (%s:%u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                             pool_member->nr, pool_member->conf.remote_addr, pool_member->conf.remote_port);</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGPPMGW(pool_member, LOGL_ERROR, "MGCP client connect failed at (%s:%u)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                 pool_member->conf.remote_addr, pool_member->conf.remote_port);</span><br><span>                        talloc_free(pool_member->client);</span><br><span>                         pool_member->client = NULL;</span><br><span>                       continue;</span><br><span>@@ -104,14 +136,14 @@</span><br><span>                    else if (pool_member_picked->refcount > pool_member->refcount)</span><br><span>                              pool_member_picked = pool_member;</span><br><span>            } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        LOGP(DLMGCP, LOGL_DEBUG, "MGW pool has %u members -- MGW %u is unusable\n", n_pool_members,</span><br><span style="color: hsl(0, 100%, 40%);">-                        pool_member->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGPPMGW(pool_member, LOGL_DEBUG, "MGW pool has %u members -- MGW %u is unusable\n", n_pool_members,</span><br><span style="color: hsl(120, 100%, 40%);">+                                 pool_member->nr);</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span>        if (pool_member_picked) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLMGCP, LOGL_DEBUG, "MGW pool has %u members -- using MGW %u (active calls: %u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                   n_pool_members, pool_member_picked->nr, pool_member_picked->refcount);</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGPPMGW(pool_member_picked, LOGL_DEBUG, "MGW pool has %u members -- using MGW %u (active calls: %u)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                     n_pool_members, pool_member_picked->nr, pool_member_picked->refcount);</span><br><span>                return pool_member_picked;</span><br><span>   }</span><br><span> </span><br><span>@@ -135,7 +167,8 @@</span><br><span> </span><br><span>      /* When the pool is empty, return a single MGCP client if it is registered. */</span><br><span>       if (llist_empty(&pool->pool) && pool->mgcp_client_single) {</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGP(DLMGCP, LOGL_DEBUG, "MGW pool is empty -- using (single) MGW\n");</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGP(DLMGCP, LOGL_DEBUG, "MGW pool is empty -- using (single) MGW %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                 mgcp_client_name(pool->mgcp_client_single));</span><br><span>                 return pool->mgcp_client_single;</span><br><span>  }</span><br><span> </span><br><span>@@ -177,7 +210,7 @@</span><br><span>  llist_for_each_entry(pool_member, &pool->pool, list) {</span><br><span>                if (pool_member->client == mgcp_client) {</span><br><span>                         if (pool_member->refcount == 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-                            LOGP(DLMGCP, LOGL_ERROR, "MGW %u has invalid refcount\n", pool_member->nr);</span><br><span style="color: hsl(120, 100%, 40%);">+                              LOGPPMGW(pool_member, LOGL_ERROR, "MGW pool member has invalid refcount\n");</span><br><span>                               return;</span><br><span>                      }</span><br><span>                    pool_member->refcount--;</span><br><span>diff --git a/src/libosmo-mgcp-client/mgcp_client_vty.c b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>index 8719e3c..4bf6cd0 100644</span><br><span>--- a/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>+++ b/src/libosmo-mgcp-client/mgcp_client_vty.c</span><br><span>@@ -242,6 +242,9 @@</span><br><span>   int port;</span><br><span>    struct reset_ep *reset_ep;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        if (conf->description)</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "%sdescription %s%s", indent, conf->description, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   addr = conf->local_addr;</span><br><span>  if (addr)</span><br><span>            vty_out(vty, "%smgw local-ip %s%s", indent, addr,</span><br><span>@@ -366,7 +369,7 @@</span><br><span>    }</span><br><span> </span><br><span>        vty->index = &pool_member->conf;</span><br><span style="color: hsl(0, 100%, 40%);">-      vty->index_sub = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+     vty->index_sub = &pool_member->conf.description;</span><br><span>   vty->node = global_mgcp_client_pool->vty_node->node;</span><br><span> </span><br><span>    return CMD_SUCCESS;</span><br><span>@@ -387,8 +390,8 @@</span><br><span> </span><br><span>        /* Make sure that there are no ongoing calls */</span><br><span>      if (pool_member->refcount > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          vty_out(vty, "%% MGCP client (MGW %u) is still serving ongoing calls -- can't remove it now!%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                  pool_member->nr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "%% MGCP client (MGW %s) is still serving ongoing calls -- can't remove it now!%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                        mgcp_client_pool_member_name(pool_member), VTY_NEWLINE);</span><br><span>             return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span>@@ -417,8 +420,8 @@</span><br><span> </span><br><span>      /* Make sure that there are no ongoing calls */</span><br><span>      if (pool_member->refcount > 0) {</span><br><span style="color: hsl(0, 100%, 40%);">-          vty_out(vty, "%% MGCP client (MGW %u) is still serving ongoing calls -- can't reconnect it now!%s",</span><br><span style="color: hsl(0, 100%, 40%);">-                       pool_member->nr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+             vty_out(vty, "%% MGCP client (MGW %s) is still serving ongoing calls -- can't reconnect it now!%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                     mgcp_client_pool_member_name(pool_member), VTY_NEWLINE);</span><br><span>             return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span>@@ -431,8 +434,10 @@</span><br><span>         /* Create a new MGCP client instance with the current config */</span><br><span>      pool_member->client = mgcp_client_init(pool_member, &pool_member->conf);</span><br><span>   if (!pool_member->client) {</span><br><span style="color: hsl(0, 100%, 40%);">-          LOGP(DLMGCP, LOGL_ERROR, "(manual) MGW %u initalization failed\n", pool_member->nr);</span><br><span style="color: hsl(0, 100%, 40%);">-               vty_out(vty, "%% MGCP client initalization failed ('%s')%s", argv[0], VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DLMGCP, LOGL_ERROR, "(manual) MGW %s initalization failed\n",</span><br><span style="color: hsl(120, 100%, 40%);">+               mgcp_client_pool_member_name(pool_member));</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "%% MGCP client (MGW %s) initalization failed ('%s')%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                       mgcp_client_pool_member_name(pool_member), argv[0], VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span>@@ -441,11 +446,13 @@</span><br><span> </span><br><span>    /* Connect client */</span><br><span>         if (mgcp_client_connect(pool_member->client)) {</span><br><span style="color: hsl(0, 100%, 40%);">-              LOGP(DLMGCP, LOGL_ERROR, "(manual) MGW %u connect failed at (%s:%u)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    pool_member->nr, pool_member->conf.remote_addr, pool_member->conf.remote_port);</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGP(DLMGCP, LOGL_ERROR, "(manual) MGW %s connect failed at (%s:%u)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                  mgcp_client_pool_member_name(pool_member), pool_member->conf.remote_addr,</span><br><span style="color: hsl(120, 100%, 40%);">+                  pool_member->conf.remote_port);</span><br><span>              talloc_free(pool_member->client);</span><br><span>                 pool_member->client = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-          vty_out(vty, "%% MGCP client initalization failed ('%s')%s", argv[0], VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+         vty_out(vty, "%% MGCP client (MGW %s) initalization failed ('%s')%s",</span><br><span style="color: hsl(120, 100%, 40%);">+                       mgcp_client_pool_member_name(pool_member), argv[0], VTY_NEWLINE);</span><br><span>            return CMD_WARNING;</span><br><span>  }</span><br><span> </span><br><span>@@ -500,7 +507,7 @@</span><br><span>  }</span><br><span> </span><br><span>        llist_for_each_entry(pool_member, &global_mgcp_client_pool->pool, list) {</span><br><span style="color: hsl(0, 100%, 40%);">-                vty_out(vty, "%%  MGW %u%s", pool_member->nr, VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+              vty_out(vty, "%%  MGW %s%s", mgcp_client_pool_member_name(pool_member), VTY_NEWLINE);</span><br><span>              vty_out(vty, "%%   mgcp-client:   %s%s", pool_member->client ? "connected" : "disconnected",</span><br><span>                        VTY_NEWLINE);</span><br><span>                vty_out(vty, "%%   service:       %s%s", pool_member->blocked ? "blocked" : "unblocked", VTY_NEWLINE);</span><br><span>@@ -538,6 +545,8 @@</span><br><span>        install_node(pool->vty_node, config_write_pool);</span><br><span>  vty_init_common(pool, mgw_node);</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  install_element(mgw_node, &cfg_description_cmd);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       install_lib_element(ENABLE_NODE, &mgw_reconnect_cmd);</span><br><span>    install_lib_element(ENABLE_NODE, &mgw_block_cmd);</span><br><span>        install_lib_element(ENABLE_NODE, &mgw_unblock_cmd);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-mgw/+/25335">change 25335</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-mgw/+/25335"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I53ff5445c8e5faffa4ef908ffb1fdb1f47ea2904 </div>
<div style="display:none"> Gerrit-Change-Number: 25335 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>