<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>