<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18003">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">lapd: Always print context information when logging<br><br>Historically, OpenBSC has primarily been used with setups that have<br>a single E1 based BTS connected. This meant that an error message on<br>the E1 LAPD implicitly has to be related to that single BTS.<br><br>However, in more comprehensive setups, there may be many BTSs on many<br>E1 lines with many signaling slots.  At this point, it's important to<br>know which line/timeslot/tei/sapi a given log message relates to.<br><br>This patch introduces related log context.<br><br>Change-Id: Ib81a749ae24013b17caaf5fd64ccd9acbbc3ce08<br>Requires: libosmocore.git Change-Id Ie6742843fff809edffcac24c4dce4edf66bc71be<br>Related: OS#1938<br>---<br>M TODO-RELEASE<br>M include/osmocom/abis/e1_input.h<br>M include/osmocom/abis/lapd.h<br>M src/e1_input.c<br>M src/input/dahdi.c<br>M src/input/e1d.c<br>M src/input/lapd.c<br>M src/input/misdn.c<br>M src/input/unixsocket.c<br>9 files changed, 96 insertions(+), 50 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/TODO-RELEASE b/TODO-RELEASE</span><br><span>index e49df7a..85b16a7 100644</span><br><span>--- a/TODO-RELEASE</span><br><span>+++ b/TODO-RELEASE</span><br><span>@@ -9,3 +9,4 @@</span><br><span> #library        what            description / commit summary line</span><br><span> libosmo-abis       API change      major: add parameter to struct e1inp_line</span><br><span> libosmo-trau       API change      add new function osmo_rtp_socket_set_dscp()</span><br><span style="color: hsl(120, 100%, 40%);">+libosmo-abis       API change      major: add parameter to struct lapd_instance</span><br><span>diff --git a/include/osmocom/abis/e1_input.h b/include/osmocom/abis/e1_input.h</span><br><span>index a38bab8..8230e44 100644</span><br><span>--- a/include/osmocom/abis/e1_input.h</span><br><span>+++ b/include/osmocom/abis/e1_input.h</span><br><span>@@ -285,6 +285,9 @@</span><br><span>                   void (*hdlc_recv_cb)(struct e1inp_ts *ts,</span><br><span>                                         struct msgb *msg));</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* obtain a string identifier/name for the given timeslot */</span><br><span style="color: hsl(120, 100%, 40%);">+void e1inp_ts_name(char *out, size_t out_len, const struct e1inp_ts *ts);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Receive a packet from the E1 driver */</span><br><span> int e1inp_rx_ts(struct e1inp_ts *ts, struct msgb *msg,</span><br><span>              uint8_t tei, uint8_t sapi);</span><br><span>diff --git a/include/osmocom/abis/lapd.h b/include/osmocom/abis/lapd.h</span><br><span>index d618187..1e9ffe7 100644</span><br><span>--- a/include/osmocom/abis/lapd.h</span><br><span>+++ b/include/osmocom/abis/lapd.h</span><br><span>@@ -38,6 +38,7 @@</span><br><span> </span><br><span>         struct llist_head tei_list;     /* list of TEI in this LAPD instance */</span><br><span>      int pcap_fd;                    /* PCAP file descriptor */</span><br><span style="color: hsl(120, 100%, 40%);">+    char *name;                     /* human-readable name */</span><br><span> };</span><br><span> </span><br><span> enum lapd_recv_errors {</span><br><span>@@ -63,7 +64,14 @@</span><br><span>  void (*tx_cb)(struct msgb *msg, void *cbdata), void *tx_cbdata,</span><br><span>      void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi, </span><br><span>                       void *rx_cbdata), void *rx_cbdata,</span><br><span style="color: hsl(0, 100%, 40%);">-      const struct lapd_profile *profile);</span><br><span style="color: hsl(120, 100%, 40%);">+  const struct lapd_profile *profile)</span><br><span style="color: hsl(120, 100%, 40%);">+OSMO_DEPRECATED("Use lapd_instance_alloc2() instead");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+struct lapd_instance *lapd_instance_alloc2(int network_side,</span><br><span style="color: hsl(120, 100%, 40%);">+ void (*tx_cb)(struct msgb *msg, void *cbdata), void *tx_cbdata,</span><br><span style="color: hsl(120, 100%, 40%);">+       void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+                 void *rx_cbdata), void *rx_cbdata,</span><br><span style="color: hsl(120, 100%, 40%);">+    const struct lapd_profile *profile, const char *name);</span><br><span> </span><br><span> /* In rare cases (e.g. Ericsson's lapd dialect), it may be necessary to</span><br><span>  * exchange the lapd profile on the fly. lapd_instance_set_profile()</span><br><span>diff --git a/src/e1_input.c b/src/e1_input.c</span><br><span>index b3341e7..7066acf 100644</span><br><span>--- a/src/e1_input.c</span><br><span>+++ b/src/e1_input.c</span><br><span>@@ -312,6 +312,14 @@</span><br><span>        return 0;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+void e1inp_ts_name(char *out, size_t out_len, const struct e1inp_ts *ts)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       if (ts->line->name)</span><br><span style="color: hsl(120, 100%, 40%);">+             snprintf(out, out_len, "%s:%u", ts->line->name, ts->num);</span><br><span style="color: hsl(120, 100%, 40%);">+  else</span><br><span style="color: hsl(120, 100%, 40%);">+          snprintf(out, out_len, "%u:%u", ts->line->num, ts->num);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> int e1inp_ts_config_sign(struct e1inp_ts *ts, struct e1inp_line *line)</span><br><span> {</span><br><span>      if (ts->type == E1INP_TS_TYPE_SIGN && ts->line && line)</span><br><span>diff --git a/src/input/dahdi.c b/src/input/dahdi.c</span><br><span>index 6da1a02..a461f27 100644</span><br><span>--- a/src/input/dahdi.c</span><br><span>+++ b/src/input/dahdi.c</span><br><span>@@ -683,10 +683,13 @@</span><br><span>                       if (ret < 0)</span><br><span>                              return ret;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                 if (!e1i_ts->lapd)</span><br><span style="color: hsl(0, 100%, 40%);">-                           e1i_ts->lapd = lapd_instance_alloc(1,</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (!e1i_ts->lapd) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               char name[32];</span><br><span style="color: hsl(120, 100%, 40%);">+                                e1inp_ts_name(name, sizeof(name), e1i_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+                            e1i_ts->lapd = lapd_instance_alloc2(1,</span><br><span>                                    dahdi_write_msg, bfd, e1inp_dlsap_up,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   e1i_ts, &lapd_profile_abis);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      e1i_ts, &lapd_profile_abis, name);</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span>                    break;</span><br><span>               case E1INP_TS_TYPE_HDLC:</span><br><span>                     if (!bfd->fd)</span><br><span>diff --git a/src/input/e1d.c b/src/input/e1d.c</span><br><span>index 1e9f3bb..f7a0b18 100644</span><br><span>--- a/src/input/e1d.c</span><br><span>+++ b/src/input/e1d.c</span><br><span>@@ -254,10 +254,13 @@</span><br><span>                    }</span><br><span>                    bfd->when = BSC_FD_READ;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-                 if (!e1i_ts->lapd)</span><br><span style="color: hsl(0, 100%, 40%);">-                           e1i_ts->lapd = lapd_instance_alloc(1,</span><br><span style="color: hsl(120, 100%, 40%);">+                      if (!e1i_ts->lapd) {</span><br><span style="color: hsl(120, 100%, 40%);">+                               char name[32];</span><br><span style="color: hsl(120, 100%, 40%);">+                                e1inp_ts_name(name, e1i_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+                          e1i_ts->lapd = lapd_instance_alloc2(1,</span><br><span>                                    e1d_write_msg, bfd, e1inp_dlsap_up,</span><br><span style="color: hsl(0, 100%, 40%);">-                                     e1i_ts, &lapd_profile_abis);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      e1i_ts, &lapd_profile_abis, name);</span><br><span style="color: hsl(120, 100%, 40%);">+                        }</span><br><span>                    break;</span><br><span>               case E1INP_TS_TYPE_HDLC:</span><br><span>                     /* close/release LAPD instance, if any */</span><br><span>diff --git a/src/input/lapd.c b/src/input/lapd.c</span><br><span>index a72a19b..4bcece5 100644</span><br><span>--- a/src/input/lapd.c</span><br><span>+++ b/src/input/lapd.c</span><br><span>@@ -73,6 +73,15 @@</span><br><span> </span><br><span> #define LAPD_SET_K(n, o)  {n,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o,o}</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGLI(li, level, fmt, args ...) \</span><br><span style="color: hsl(120, 100%, 40%);">+ LOGP(DLLAPD, level, "%s: " fmt, (li)->name, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGTEI(teip, level, fmt, args ...) \</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGP(DLLAPD, level, "(%s-T%u): " fmt, (teip)->li->name, (teip)->tei, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define LOGSAP(sap, level, fmt, args ...) \</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGP(DLLAPD, level, "%s: " fmt, (sap)->dl.name, ## args)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> const struct lapd_profile lapd_profile_isdn = {</span><br><span>   .k              = LAPD_SET_K(7,7),</span><br><span>   .n200           = 3,</span><br><span>@@ -177,7 +186,7 @@</span><br><span> /* Change state of TEI */</span><br><span> static void lapd_tei_set_state(struct lapd_tei *teip, int newstate)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DLLAPD, LOGL_INFO, "LAPD state change on TEI %d: %s -> %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+       LOGTEI(teip, LOGL_INFO, "LAPD state change on TEI %d: %s -> %s\n",</span><br><span>              teip->tei, lapd_tei_states[teip->state],</span><br><span>               lapd_tei_states[newstate]);</span><br><span>  teip->state = newstate;</span><br><span>@@ -223,29 +232,32 @@</span><br><span> {</span><br><span>      struct lapd_sap *sap;</span><br><span>        struct lapd_datalink *dl;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct lapd_instance *li;</span><br><span style="color: hsl(120, 100%, 40%);">+     struct lapd_instance *li = teip->li;</span><br><span>      struct lapd_profile *profile;</span><br><span style="color: hsl(120, 100%, 40%);">+ char name[256];</span><br><span>      int k;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    snprintf(name, sizeof(name), "(%s-T%u-S%u)", li->name, teip->tei, sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>   sap = talloc_zero(teip, struct lapd_sap);</span><br><span>    if (!sap)</span><br><span>            return NULL;</span><br><span> </span><br><span>     LOGP(DLLAPD, LOGL_NOTICE,</span><br><span style="color: hsl(0, 100%, 40%);">-            "LAPD Allocating SAP for SAPI=%u / TEI=%u (dl=%p, sap=%p)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-         sapi, teip->tei, &sap->dl, sap);</span><br><span style="color: hsl(120, 100%, 40%);">+            "%s: LAPD Allocating SAP for SAPI=%u / TEI=%u (dl=%p, sap=%p)\n",</span><br><span style="color: hsl(120, 100%, 40%);">+           name, sapi, teip->tei, &sap->dl, sap);</span><br><span> </span><br><span>    sap->sapi = sapi;</span><br><span>         sap->tei = teip;</span><br><span>  dl = &sap->dl;</span><br><span style="color: hsl(0, 100%, 40%);">-   li = teip->li;</span><br><span>    profile = &li->profile;</span><br><span> </span><br><span>   k = profile->k[sapi & 0x3f];</span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DLLAPD, LOGL_NOTICE, "k=%d N200=%d N201=%d T200=%d.%d T203=%d.%d"</span><br><span style="color: hsl(0, 100%, 40%);">-                "\n", k, profile->n200, profile->n201, profile->t200_sec,</span><br><span style="color: hsl(120, 100%, 40%);">+  LOGP(DLLAPD, LOGL_NOTICE, "%s: k=%d N200=%d N201=%d T200=%d.%d T203=%d.%d\n",</span><br><span style="color: hsl(120, 100%, 40%);">+               name, k, profile->n200, profile->n201, profile->t200_sec,</span><br><span>           profile->t200_usec, profile->t203_sec, profile->t203_usec);</span><br><span>         lapd_dl_init(dl, k, 128, profile->n201);</span><br><span style="color: hsl(120, 100%, 40%);">+   lapd_dl_set_name(dl, name);</span><br><span>  dl->use_sabme = 1; /* use SABME instead of SABM (GSM) */</span><br><span>  dl->send_ph_data_req = send_ph_data_req;</span><br><span>  dl->send_dlsap = send_dlsap;</span><br><span>@@ -269,7 +281,7 @@</span><br><span> /* Free SAP instance, including the datalink */</span><br><span> static void lapd_sap_free(struct lapd_sap *sap)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-        LOGP(DLLAPD, LOGL_NOTICE,</span><br><span style="color: hsl(120, 100%, 40%);">+     LOGSAP(sap, LOGL_NOTICE,</span><br><span>          "LAPD Freeing SAP for SAPI=%u / TEI=%u (dl=%p, sap=%p)\n",</span><br><span>         sap->sapi, sap->tei->tei, &sap->dl, sap);</span><br><span> </span><br><span>@@ -306,7 +318,7 @@</span><br><span>     struct msgb *msg;</span><br><span> </span><br><span>        if (len < 5) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLLAPD, LOGL_ERROR, "LAPD TEIMGR frame receive len %d < 5"</span><br><span style="color: hsl(120, 100%, 40%);">+          LOGLI(li, LOGL_ERROR, "LAPD TEIMGR frame receive len %d < 5"</span><br><span>                    ", ignoring\n", len);</span><br><span>              return -EINVAL;</span><br><span>      };</span><br><span>@@ -327,7 +339,7 @@</span><br><span> </span><br><span>                 teip = teip_from_tei(li, action);</span><br><span>            if (!teip) {</span><br><span style="color: hsl(0, 100%, 40%);">-                    LOGP(DLLAPD, LOGL_INFO, "TEI MGR: New TEI %u\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                    LOGLI(li, LOGL_INFO, "TEI MGR: New TEI %u\n",</span><br><span>                              action);</span><br><span>                     teip = lapd_tei_alloc(li, action);</span><br><span>                   if (!teip)</span><br><span>@@ -344,16 +356,14 @@</span><br><span>           /* write to PCAP file, if enabled. */</span><br><span>                osmo_pcap_lapd_write(li->pcap_fd, OSMO_LAPD_PCAP_OUTPUT, msg);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-           LOGP(DLLAPD, LOGL_DEBUG, "TX: %s\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                  osmo_hexdump(msg->data, msg->len));</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGTEI(teip, LOGL_DEBUG, "TX: %s\n", osmo_hexdump(msg->data, msg->len));</span><br><span>             li->transmit_cb(msg, li->transmit_cbdata);</span><br><span> </span><br><span>                 if (teip->state == LAPD_TEI_NONE)</span><br><span>                         lapd_tei_set_state(teip, LAPD_TEI_ASSIGNED);</span><br><span>                 break;</span><br><span>       default:</span><br><span style="color: hsl(0, 100%, 40%);">-                LOGP(DLLAPD, LOGL_NOTICE, "LAPD TEIMGR: unknown mt %x "</span><br><span style="color: hsl(0, 100%, 40%);">-                       "action %x\n", mt, action);</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGLI(li, LOGL_NOTICE, "LAPD TEIMGR: unknown mt %x action %x\n", mt, action);</span><br><span>              break;</span><br><span>       };</span><br><span> </span><br><span>@@ -372,10 +382,9 @@</span><br><span>        /* write to PCAP file, if enabled. */</span><br><span>        osmo_pcap_lapd_write(li->pcap_fd, OSMO_LAPD_PCAP_INPUT, msg);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    LOGP(DLLAPD, LOGL_DEBUG, "RX: %s\n", osmo_hexdump(msg->data, msg->len));</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGLI(li, LOGL_DEBUG, "RX: %s\n", osmo_hexdump(msg->data, msg->len));</span><br><span>        if (msg->len < 2) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLLAPD, LOGL_ERROR, "LAPD frame receive len %d < 2, "</span><br><span style="color: hsl(0, 100%, 40%);">-                 "ignoring\n", msg->len);</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGLI(li, LOGL_ERROR, "LAPD frame receive len %d < 2, ignoring\n", msg->len);</span><br><span>                *error = LAPD_ERR_BAD_LEN;</span><br><span>           return -EINVAL;</span><br><span>      };</span><br><span>@@ -390,7 +399,7 @@</span><br><span>     lctx.lpd = 0;</span><br><span>        if (!LAPD_ADDR_EA(msg->l2h[i])) {</span><br><span>                 if (msg->len < 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-                       LOGP(DLLAPD, LOGL_ERROR, "LAPD frame with TEI receive "</span><br><span style="color: hsl(120, 100%, 40%);">+                     LOGLI(li, LOGL_ERROR, "LAPD frame with TEI receive "</span><br><span>                               "len %d < 3, ignoring\n", msg->len);</span><br><span>                         *error = LAPD_ERR_BAD_LEN;</span><br><span>                   return -EINVAL;</span><br><span>@@ -405,13 +414,13 @@</span><br><span>              lctx.n_send = LAPD_CTRL_I_Ns(msg->l2h[i]);</span><br><span>                i++;</span><br><span>                 if (msg->len < 3 && i == 2) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLLAPD, LOGL_ERROR, "LAPD I frame without TEI "</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGLI(li, LOGL_ERROR, "LAPD I frame without TEI "</span><br><span>                          "receive len %d < 3, ignoring\n", msg->len);</span><br><span>                         *error = LAPD_ERR_BAD_LEN;</span><br><span>                   return -EINVAL;</span><br><span>              };</span><br><span>           if (msg->len < 4 && i == 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLLAPD, LOGL_ERROR, "LAPD I frame with TEI "</span><br><span style="color: hsl(120, 100%, 40%);">+                   LOGLI(li, LOGL_ERROR, "LAPD I frame with TEI "</span><br><span>                             "receive len %d < 4, ignoring\n", msg->len);</span><br><span>                         *error = LAPD_ERR_BAD_LEN;</span><br><span>                   return -EINVAL;</span><br><span>@@ -423,13 +432,13 @@</span><br><span>              lctx.s_u = LAPD_CTRL_S_BITS(msg->l2h[i]);</span><br><span>                 i++;</span><br><span>                 if (msg->len < 3 && i == 2) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLLAPD, LOGL_ERROR, "LAPD S frame without TEI "</span><br><span style="color: hsl(120, 100%, 40%);">+                        LOGLI(li, LOGL_ERROR, "LAPD S frame without TEI "</span><br><span>                          "receive len %d < 3, ignoring\n", msg->len);</span><br><span>                         *error = LAPD_ERR_BAD_LEN;</span><br><span>                   return -EINVAL;</span><br><span>              };</span><br><span>           if (msg->len < 4 && i == 3) {</span><br><span style="color: hsl(0, 100%, 40%);">-                     LOGP(DLLAPD, LOGL_ERROR, "LAPD S frame with TEI "</span><br><span style="color: hsl(120, 100%, 40%);">+                   LOGLI(li, LOGL_ERROR, "LAPD S frame with TEI "</span><br><span>                             "receive len %d < 4, ignoring\n", msg->len);</span><br><span>                         *error = LAPD_ERR_BAD_LEN;</span><br><span>                   return -EINVAL;</span><br><span>@@ -458,14 +467,14 @@</span><br><span>      /* resolve TEI and SAPI */</span><br><span>   teip = teip_from_tei(li, lctx.tei);</span><br><span>  if (!teip) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLLAPD, LOGL_NOTICE, "LAPD Unknown TEI %u\n", lctx.tei);</span><br><span style="color: hsl(120, 100%, 40%);">+               LOGLI(li, LOGL_NOTICE, "LAPD Unknown TEI %u\n", lctx.tei);</span><br><span>                 *error = LAPD_ERR_UNKNOWN_TEI;</span><br><span>               msgb_free(msg);</span><br><span>              return -EINVAL;</span><br><span>      }</span><br><span>    sap = lapd_sap_find(teip, lctx.sapi);</span><br><span>        if (!sap) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLLAPD, LOGL_INFO, "LAPD No SAP for TEI=%u / SAPI=%u, "</span><br><span style="color: hsl(120, 100%, 40%);">+                LOGTEI(teip, LOGL_INFO, "LAPD No SAP for TEI=%u / SAPI=%u, "</span><br><span>                       "allocating\n", lctx.tei, lctx.sapi);</span><br><span>              sap = lapd_sap_alloc(teip, lctx.sapi);</span><br><span>               if (!sap) {</span><br><span>@@ -478,7 +487,7 @@</span><br><span>    lctx.n201 = lctx.dl->maxf;</span><br><span> </span><br><span>    if (msg->len > lctx.n201) {</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLLAPD, LOGL_ERROR, "message len %d > N201(%d) "</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGSAP(sap, LOGL_ERROR, "message len %d > N201(%d) "</span><br><span>                    "(discarding)\n", msg->len, lctx.n201);</span><br><span>                 msgb_free(msg);</span><br><span>              *error = LAPD_ERR_BAD_LEN;</span><br><span>@@ -509,8 +518,7 @@</span><br><span>     if (!sap)</span><br><span>            return -ENOMEM;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DLLAPD, LOGL_NOTICE, "LAPD DL-ESTABLISH request TEI=%d SAPI=%d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-               tei, sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   LOGSAP(sap, LOGL_NOTICE, "LAPD DL-ESTABLISH request TEI=%d SAPI=%d\n", tei, sapi);</span><br><span> </span><br><span>     /* prepare prim */</span><br><span>   msg = msgb_alloc_headroom(56, 56, "DL EST");</span><br><span>@@ -537,8 +545,7 @@</span><br><span>         if (!sap)</span><br><span>            return -ENODEV;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     LOGP(DLLAPD, LOGL_NOTICE, "LAPD DL-RELEASE request TEI=%d SAPI=%d\n",</span><br><span style="color: hsl(0, 100%, 40%);">-         tei, sapi);</span><br><span style="color: hsl(120, 100%, 40%);">+   LOGSAP(sap, LOGL_NOTICE, "LAPD DL-RELEASE request TEI=%d SAPI=%d\n", tei, sapi);</span><br><span> </span><br><span>       /* prepare prim */</span><br><span>   msg = msgb_alloc_headroom(56, 56, "DL REL");</span><br><span>@@ -558,16 +565,14 @@</span><br><span>       struct osmo_dlsap_prim dp;</span><br><span> </span><br><span>       if (!teip) {</span><br><span style="color: hsl(0, 100%, 40%);">-            LOGP(DLLAPD, LOGL_ERROR, "LAPD Cannot transmit on "</span><br><span style="color: hsl(0, 100%, 40%);">-                "non-existing TEI %u\n", tei);</span><br><span style="color: hsl(120, 100%, 40%);">+         LOGLI(li, LOGL_ERROR, "LAPD Cannot transmit on non-existing TEI %u\n", tei);</span><br><span>               msgb_free(msg);</span><br><span>              return;</span><br><span>      }</span><br><span> </span><br><span>        sap = lapd_sap_find(teip, sapi);</span><br><span>     if (!sap) {</span><br><span style="color: hsl(0, 100%, 40%);">-             LOGP(DLLAPD, LOGL_INFO, "LAPD Tx on unknown SAPI=%u "</span><br><span style="color: hsl(0, 100%, 40%);">-              "in TEI=%u\n", sapi, tei);</span><br><span style="color: hsl(120, 100%, 40%);">+             LOGTEI(teip, LOGL_INFO, "LAPD Tx on unknown SAPI=%u in TEI=%u\n", sapi, tei);</span><br><span>              msgb_free(msg);</span><br><span>              return;</span><br><span>      }</span><br><span>@@ -625,7 +630,7 @@</span><br><span>      osmo_pcap_lapd_write(li->pcap_fd, OSMO_LAPD_PCAP_OUTPUT, msg);</span><br><span> </span><br><span>        /* forward frame to L1 */</span><br><span style="color: hsl(0, 100%, 40%);">-       LOGP(DLLAPD, LOGL_DEBUG, "TX: %s\n", osmo_hexdump(msg->data, msg->len));</span><br><span style="color: hsl(120, 100%, 40%);">+      LOGDL(dl, LOGL_DEBUG, "TX: %s\n", osmo_hexdump(msg->data, msg->len));</span><br><span>        li->transmit_cb(msg, li->transmit_cbdata);</span><br><span> </span><br><span>         return 0;</span><br><span>@@ -648,11 +653,11 @@</span><br><span> </span><br><span>        switch (dp->oph.primitive) {</span><br><span>      case PRIM_DL_EST:</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLLAPD, LOGL_NOTICE, "LAPD DL-ESTABLISH %s TEI=%d "</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGDL(dl, LOGL_NOTICE, "LAPD DL-ESTABLISH %s TEI=%d "</span><br><span>                      "SAPI=%d\n", op, lctx->tei, lctx->sapi);</span><br><span>             break;</span><br><span>       case PRIM_DL_REL:</span><br><span style="color: hsl(0, 100%, 40%);">-               LOGP(DLLAPD, LOGL_NOTICE, "LAPD DL-RELEASE %s TEI=%d "</span><br><span style="color: hsl(120, 100%, 40%);">+              LOGDL(dl, LOGL_NOTICE, "LAPD DL-RELEASE %s TEI=%d "</span><br><span>                        "SAPI=%d\n", op, lctx->tei, lctx->sapi);</span><br><span>             lapd_sap_free(sap);</span><br><span>          /* note: sap and dl is now gone, don't use it anymore */</span><br><span>@@ -667,11 +672,11 @@</span><br><span> }</span><br><span> </span><br><span> /* Allocate a new LAPD instance */</span><br><span style="color: hsl(0, 100%, 40%);">-struct lapd_instance *lapd_instance_alloc(int network_side,</span><br><span style="color: hsl(120, 100%, 40%);">+struct lapd_instance *lapd_instance_alloc2(int network_side,</span><br><span>         void (*tx_cb)(struct msgb *msg, void *cbdata), void *tx_cbdata,</span><br><span style="color: hsl(0, 100%, 40%);">- void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi, </span><br><span style="color: hsl(120, 100%, 40%);">+        void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi,</span><br><span>                        void *rx_cbdata), void *rx_cbdata,</span><br><span style="color: hsl(0, 100%, 40%);">-      const struct lapd_profile *profile)</span><br><span style="color: hsl(120, 100%, 40%);">+   const struct lapd_profile *profile, const char *name)</span><br><span> {</span><br><span>   struct lapd_instance *li;</span><br><span> </span><br><span>@@ -685,6 +690,7 @@</span><br><span>  li->receive_cb = rx_cb;</span><br><span>   li->receive_cbdata = rx_cbdata;</span><br><span>   li->pcap_fd = -1;</span><br><span style="color: hsl(120, 100%, 40%);">+  li->name = talloc_strdup(li, name);</span><br><span>       memcpy(&li->profile, profile, sizeof(li->profile));</span><br><span> </span><br><span>    INIT_LLIST_HEAD(&li->tei_list);</span><br><span>@@ -692,6 +698,16 @@</span><br><span>        return li;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+struct lapd_instance *lapd_instance_alloc(int network_side,</span><br><span style="color: hsl(120, 100%, 40%);">+      void (*tx_cb)(struct msgb *msg, void *cbdata), void *tx_cbdata,</span><br><span style="color: hsl(120, 100%, 40%);">+       void (*rx_cb)(struct osmo_dlsap_prim *odp, uint8_t tei, uint8_t sapi,</span><br><span style="color: hsl(120, 100%, 40%);">+                 void *rx_cbdata), void *rx_cbdata,</span><br><span style="color: hsl(120, 100%, 40%);">+    const struct lapd_profile *profile)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        return lapd_instance_alloc2(network_side, tx_cbdata, tx_cb, rx_cb, rx_cbdata, profile, NULL);</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%);">+</span><br><span> /* Change lapd-profile on the fly (use with caution!) */</span><br><span> void lapd_instance_set_profile(struct lapd_instance *li,</span><br><span>                                const struct lapd_profile *profile)</span><br><span>diff --git a/src/input/misdn.c b/src/input/misdn.c</span><br><span>index fef1c0f..564d008 100644</span><br><span>--- a/src/input/misdn.c</span><br><span>+++ b/src/input/misdn.c</span><br><span>@@ -636,10 +636,12 @@</span><br><span>          switch (e1i_ts->type) {</span><br><span>           case E1INP_TS_TYPE_SIGN:</span><br><span>                     if (mline->use_userspace_lapd) {</span><br><span style="color: hsl(120, 100%, 40%);">+                           char name[32];</span><br><span>                               addr.channel = ts;</span><br><span style="color: hsl(0, 100%, 40%);">-                              e1i_ts->lapd = lapd_instance_alloc(1,</span><br><span style="color: hsl(120, 100%, 40%);">+                              e1inp_ts_name(name, sizeof(name), e1i_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+                            e1i_ts->lapd = lapd_instance_alloc2(1,</span><br><span>                                    misdn_write_msg, bfd, e1inp_dlsap_up,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   e1i_ts, &lapd_profile_abis);</span><br><span style="color: hsl(120, 100%, 40%);">+                                      e1i_ts, &lapd_profile_abis, name);</span><br><span>                       } else {</span><br><span>                             addr.channel = 0;</span><br><span>                            /* SAPI not supported yet in kernel */</span><br><span>diff --git a/src/input/unixsocket.c b/src/input/unixsocket.c</span><br><span>index 1d25ddf..cfb4979 100644</span><br><span>--- a/src/input/unixsocket.c</span><br><span>+++ b/src/input/unixsocket.c</span><br><span>@@ -287,10 +287,12 @@</span><br><span>  /* Set line parameter */</span><br><span>     for (i = 0; i < ARRAY_SIZE(line->ts); i++) {</span><br><span>           struct e1inp_ts *e1i_ts = &line->ts[i];</span><br><span style="color: hsl(120, 100%, 40%);">+                char name[32];</span><br><span>               if (!e1i_ts->lapd) {</span><br><span style="color: hsl(0, 100%, 40%);">-                 e1i_ts->lapd = lapd_instance_alloc(1,</span><br><span style="color: hsl(120, 100%, 40%);">+                      e1inp_ts_name(name, sizeof(name), e1i_ts);</span><br><span style="color: hsl(120, 100%, 40%);">+                    e1i_ts->lapd = lapd_instance_alloc2(1,</span><br><span>                            unixsocket_write_msg_lapd_cb, &config->fd,</span><br><span style="color: hsl(0, 100%, 40%);">-                               e1inp_dlsap_up, e1i_ts, &lapd_profile_abis);</span><br><span style="color: hsl(120, 100%, 40%);">+                              e1inp_dlsap_up, e1i_ts, &lapd_profile_abis, name);</span><br><span>               }</span><br><span>    }</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmo-abis/+/18003">change 18003</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/libosmo-abis/+/18003"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmo-abis </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Ib81a749ae24013b17caaf5fd64ccd9acbbc3ce08 </div>
<div style="display:none"> Gerrit-Change-Number: 18003 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-CC: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>