diff --git a/src/input/dahdi.c b/src/input/dahdi.c
index 4ad32af..f0d12b7 100644
--- a/src/input/dahdi.c
+++ b/src/input/dahdi.c
@@ -67,7 +67,7 @@
 	if (rc < 0)
 		return;
 
-	LOGP(DMI, LOGL_NOTICE, "Line %u(%s) / TS %u DAHDI EVENT %s\n",
+	LOGP(DLMI, LOGL_NOTICE, "Line %u(%s) / TS %u DAHDI EVENT %s\n",
 		ts->line->num, ts->line->name, ts->num,
 		get_value_string(dahdi_evt_names, evt));
 
@@ -76,11 +76,11 @@
 	switch (evt) {
 	case DAHDI_EVENT_ALARM:
 		/* we should notify the code that the line is gone */
-		osmo_signal_dispatch(SS_INPUT, S_INP_LINE_ALARM, &isd);
+		osmo_signal_dispatch(SS_L_INPUT, S_INP_LINE_ALARM, &isd);
 		break;
 	case DAHDI_EVENT_NOALARM:
 		/* alarm has gone, we should re-start the SABM requests */
-		osmo_signal_dispatch(SS_INPUT, S_INP_LINE_NOALARM, &isd);
+		osmo_signal_dispatch(SS_L_INPUT, S_INP_LINE_NOALARM, &isd);
 		break;
 	}
 }
@@ -113,7 +113,7 @@
 	sapi = msg->data[0] >> 2;
 	tei = msg->data[1] >> 1;
 
-	DEBUGP(DMI, "<= len = %d, sapi(%d) tei(%d)", ret, sapi, tei);
+	DEBUGP(DLMI, "<= len = %d, sapi(%d) tei(%d)", ret, sapi, tei);
 
 	idata = lapd_receive(e1i_ts->driver.dahdi.lapd, msg->data, msg->len, &ilen, &prim);
 	if (!idata && prim == 0)
@@ -121,17 +121,17 @@
 
 	msgb_pull(msg, 2);
 
-	DEBUGP(DMI, "prim %08x\n", prim);
+	DEBUGP(DLMI, "prim %08x\n", prim);
 
 	switch (prim) {
 	case 0:
 		break;
 	case LAPD_MPH_ACTIVATE_IND:
-		DEBUGP(DMI, "MPH_ACTIVATE_IND: sapi(%d) tei(%d)\n", sapi, tei);
+		DEBUGP(DLMI, "MPH_ACTIVATE_IND: sapi(%d) tei(%d)\n", sapi, tei);
 		ret = e1inp_event(e1i_ts, S_INP_TEI_UP, tei, sapi);
 		break;
 	case LAPD_MPH_DEACTIVATE_IND:
-		DEBUGP(DMI, "MPH_DEACTIVATE_IND: sapi(%d) tei(%d)\n", sapi, tei);
+		DEBUGP(DLMI, "MPH_DEACTIVATE_IND: sapi(%d) tei(%d)\n", sapi, tei);
 		ret = e1inp_event(e1i_ts, S_INP_TEI_DN, tei, sapi);
 		break;
 	case LAPD_DL_DATA_IND:
@@ -140,7 +140,7 @@
 			msg->l2h = msg->data + 2;
 		else
 			msg->l2h = msg->data + 1;
-		DEBUGP(DMI, "RX: %s\n", osmo_hexdump(msgb_l2(msg), ret));
+		DEBUGP(DLMI, "RX: %s\n", osmo_hexdump(msgb_l2(msg), ret));
 		ret = e1inp_rx_ts(e1i_ts, msg, tei, sapi);
 		break;
 	default:
@@ -148,7 +148,7 @@
 		break;
 	}
 
-	DEBUGP(DMI, "Returned ok\n");
+	DEBUGP(DLMI, "Returned ok\n");
 	return ret;
 }
 
@@ -187,7 +187,7 @@
 	if (ret == -1)
 		handle_dahdi_exception(e1i_ts);
 	else if (ret < 0)
-		LOGP(DMI, LOGL_NOTICE, "%s write failed %d\n", __func__, ret);
+		LOGP(DLMI, LOGL_NOTICE, "%s write failed %d\n", __func__, ret);
 }
 
 static int handle_ts1_write(struct osmo_fd *bfd)
@@ -207,7 +207,7 @@
 		return 0;
 	}
 
-	DEBUGP(DMI, "TX: %s\n", osmo_hexdump(msg->data, msg->len));
+	DEBUGP(DLMI, "TX: %s\n", osmo_hexdump(msg->data, msg->len));
 	lapd_transmit(e1i_ts->driver.dahdi.lapd, sign_link->tei,
 		      sign_link->sapi, msg->data, msg->len);
 	msgb_free(msg);
@@ -269,7 +269,7 @@
 			return ret;
 	}
 
-	DEBUGP(DMIB, "BCHAN TX: %s\n",
+	DEBUGP(DLMIB, "BCHAN TX: %s\n",
 		osmo_hexdump(tx_buf, D_BCHAN_TX_GRAN));
 
 	if (invertbits) {
@@ -310,7 +310,7 @@
 	msgb_put(msg, ret);
 
 	msg->l2h = msg->data;
-	DEBUGP(DMIB, "BCHAN RX: %s\n",
+	DEBUGP(DLMIB, "BCHAN RX: %s\n",
 		osmo_hexdump(msgb_l2(msg), ret));
 	ret = e1inp_rx_ts(e1i_ts, msg, 0, 0);
 	/* physical layer indicates that data has been sent,
diff --git a/src/input/hsl.c b/src/input/hsl.c
index 8f2bf73..98fd40f 100644
--- a/src/input/hsl.c
+++ b/src/input/hsl.c
@@ -108,7 +108,7 @@
 		unit_data.serno = strtoul(serno_buf, NULL, 10);
 
 		if (!line->ops->sign_link_up) {
-			LOGP(DINP, LOGL_ERROR,
+			LOGP(DLINP, LOGL_ERROR,
 			     "Unable to set signal link, closing socket.\n");
 			osmo_fd_unregister(bfd);
 			close(bfd->fd);
@@ -118,7 +118,7 @@
 		sign_link = line->ops->sign_link_up(&unit_data,
 						    line, E1INP_SIGN_NONE);
 		if (sign_link == NULL) {
-			LOGP(DINP, LOGL_ERROR,
+			LOGP(DLINP, LOGL_ERROR,
 			     "Unable to set signal link, closing socket.\n");
 			osmo_fd_unregister(bfd);
 			close(bfd->fd);
@@ -151,14 +151,14 @@
 		return error;
 	else if (error == 0) {
 		hsl_drop(e1i_ts->line, bfd);
-		LOGP(DINP, LOGL_NOTICE, "Sign link vanished, dead socket\n");
+		LOGP(DLINP, LOGL_NOTICE, "Sign link vanished, dead socket\n");
 		return error;
 	}
-	DEBUGP(DMI, "RX %u: %s\n", ts_nr, osmo_hexdump(msgb_l2(msg), msgb_l2len(msg)));
+	DEBUGP(DLMI, "RX %u: %s\n", ts_nr, osmo_hexdump(msgb_l2(msg), msgb_l2len(msg)));
 
 	hh = (struct ipaccess_head *) msg->data;
 	if (hh->proto == HSL_PROTO_DEBUG) {
-		LOGP(DINP, LOGL_NOTICE, "HSL debug: %s\n", msg->data + sizeof(*hh));
+		LOGP(DLINP, LOGL_NOTICE, "HSL debug: %s\n", msg->data + sizeof(*hh));
 		msgb_free(msg);
 		return ret;
 	}
@@ -181,7 +181,7 @@
 #endif
 	link = e1inp_lookup_sign_link(e1i_ts, hh->proto, 0);
 	if (!link) {
-		LOGP(DINP, LOGL_ERROR, "no matching signalling link for "
+		LOGP(DLINP, LOGL_ERROR, "no matching signalling link for "
 			"hh->proto=0x%02x\n", hh->proto);
 		msgb_free(msg);
 		return -EIO;
@@ -190,7 +190,7 @@
 
 	/* XXX: better use e1inp_ts_rx? */
 	if (!e1i_ts->line->ops->sign_link) {
-		LOGP(DINP, LOGL_ERROR, "Fix your application, "
+		LOGP(DLINP, LOGL_ERROR, "Fix your application, "
 			"no action set for signalling messages.\n");
 		return -ENOENT;
 	}
@@ -253,7 +253,7 @@
 	msg->l2h = msg->data;
 	ipaccess_prepend_header(msg, sign_link->tei);
 
-	DEBUGP(DMI, "TX %u: %s\n", ts_nr, osmo_hexdump(msg->l2h, msgb_l2len(msg)));
+	DEBUGP(DLMI, "TX %u: %s\n", ts_nr, osmo_hexdump(msg->l2h, msgb_l2len(msg)));
 
 	ret = send(bfd->fd, msg->data, msg->len, 0);
 	msgb_free(msg);
@@ -302,7 +302,7 @@
 		if (what & BSC_FD_WRITE)
 			rc = handle_ts1_write(bfd);
 	} else
-		LOGP(DINP, LOGL_ERROR, "unknown E1 TS type %u\n", e1i_ts->type);
+		LOGP(DLINP, LOGL_ERROR, "unknown E1 TS type %u\n", e1i_ts->type);
 
 	return rc;
 }
@@ -351,13 +351,13 @@
 		perror("accept");
 		return ret;
 	}
-	LOGP(DINP, LOGL_NOTICE, "accept()ed new HSL link from %s\n",
+	LOGP(DLINP, LOGL_NOTICE, "accept()ed new HSL link from %s\n",
 		inet_ntoa(sa.sin_addr));
 
 	/* clone virtual E1 line for this new signalling link. */
 	line = e1inp_line_clone(tall_hsl_ctx, listen_bfd->data);
 	if (line == NULL) {
-		LOGP(DINP, LOGL_ERROR, "could not clone E1 line\n");
+		LOGP(DLINP, LOGL_ERROR, "could not clone E1 line\n");
 		return -1;
 	}
 	/* create virrtual E1 timeslots for signalling */
@@ -377,7 +377,7 @@
 	bfd->when = BSC_FD_READ;
 	ret = osmo_fd_register(bfd);
 	if (ret < 0) {
-		LOGP(DINP, LOGL_ERROR, "could not register FD\n");
+		LOGP(DLINP, LOGL_ERROR, "could not register FD\n");
 		close(bfd->fd);
 		e1inp_line_put(line);
 		return ret;
@@ -394,14 +394,14 @@
 
 	hh = (struct ipaccess_head *) msg->data;
 	if (hh->proto == HSL_PROTO_DEBUG) {
-		LOGP(DINP, LOGL_NOTICE, "HSL debug: %s\n",
+		LOGP(DLINP, LOGL_NOTICE, "HSL debug: %s\n",
 						msg->data + sizeof(*hh));
 		msgb_free(msg);
 		return 0;
 	}
 	sign_link = e1inp_lookup_sign_link(e1i_ts, hh->proto, 0);
 	if (!sign_link) {
-		LOGP(DINP, LOGL_ERROR, "no matching signalling link for "
+		LOGP(DLINP, LOGL_ERROR, "no matching signalling link for "
 			"hh->proto=0x%02x\n", hh->proto);
 		msgb_free(msg);
 		return -EIO;
@@ -410,7 +410,7 @@
 
 	/* XXX better use e1inp_ts_rx? */
 	if (!link->line->ops->sign_link) {
-		LOGP(DINP, LOGL_ERROR, "Fix your application, "
+		LOGP(DLINP, LOGL_ERROR, "Fix your application, "
 			"no action set for signalling messages.\n");
 		return -ENOENT;
 	}
@@ -443,7 +443,7 @@
 
 	/* ... and enable the signalling link. */
 	if (!link->line->ops->sign_link_up) {
-		LOGP(DINP, LOGL_ERROR,
+		LOGP(DLINP, LOGL_ERROR,
 			"Unable to set signal link, closing socket.\n");
 		ipa_client_link_close(link);
 		return -EINVAL;
@@ -451,7 +451,7 @@
 	sign_link = link->line->ops->sign_link_up(&unit,
 						  link->line, E1INP_SIGN_NONE);
 	if (sign_link == NULL) {
-		LOGP(DINP, LOGL_ERROR,
+		LOGP(DLINP, LOGL_ERROR,
 		     "Unable to set signal link, closing socket.\n");
 		ipa_client_link_close(link);
 		return -EINVAL;
@@ -466,7 +466,7 @@
 
 	switch(role) {
 	case E1INP_LINE_R_BSC:
-		LOGP(DINP, LOGL_NOTICE, "enabling hsl BSC mode\n");
+		LOGP(DLINP, LOGL_NOTICE, "enabling hsl BSC mode\n");
 
 		ret = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP,
 				     addr, HSL_TCP_PORT, OSMO_SOCK_F_BIND);
@@ -486,7 +486,7 @@
 	case E1INP_LINE_R_BTS: {
 		struct ipa_client_link *link;
 
-		LOGP(DINP, LOGL_NOTICE, "enabling hsl BTS mode\n");
+		LOGP(DLINP, LOGL_NOTICE, "enabling hsl BTS mode\n");
 
 		link = ipa_client_link_create(tall_hsl_ctx,
 					      &line->ts[E1INP_SIGN_OML-1],
@@ -497,12 +497,12 @@
 					      hsl_bts_write,
 					      NULL);
 		if (link == NULL) {
-			LOGP(DINP, LOGL_ERROR, "cannot create BTS link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot create BTS link: %s\n",
 				strerror(errno));
 			return -ENOMEM;
 		}
 		if (ipa_client_link_open(link) < 0) {
-			LOGP(DINP, LOGL_ERROR, "cannot open BTS link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot open BTS link: %s\n",
 				strerror(errno));
 			ipa_client_link_close(link);
 			ipa_client_link_destroy(link);
diff --git a/src/input/ipa.c b/src/input/ipa.c
index dd740bf..9b380b0 100644
--- a/src/input/ipa.c
+++ b/src/input/ipa.c
@@ -94,9 +94,9 @@
 
 static void ipa_client_retry(struct ipa_client_link *link)
 {
-	LOGP(DINP, LOGL_NOTICE, "connection closed\n");
+	LOGP(DLINP, LOGL_NOTICE, "connection closed\n");
 	ipa_client_link_close(link);
-	LOGP(DINP, LOGL_NOTICE, "retrying in 5 seconds...\n");
+	LOGP(DLINP, LOGL_NOTICE, "retrying in 5 seconds...\n");
 	osmo_timer_schedule(&link->timer, 5, 0);
 	link->state = IPA_CLIENT_LINK_STATE_CONNECTING;
 }
@@ -113,19 +113,19 @@
 	struct msgb *msg;
 	int ret;
 
-	LOGP(DINP, LOGL_NOTICE, "message received\n");
+	LOGP(DLINP, LOGL_NOTICE, "message received\n");
 
 	ret = ipa_msg_recv(ofd->fd, &msg);
 	if (ret < 0) {
 		if (errno == EPIPE || errno == ECONNRESET) {
-			LOGP(DINP, LOGL_ERROR, "lost connection with server\n");
+			LOGP(DLINP, LOGL_ERROR, "lost connection with server\n");
 		} else {
-			LOGP(DINP, LOGL_ERROR, "unknown error\n");
+			LOGP(DLINP, LOGL_ERROR, "unknown error\n");
 		}
 		ipa_client_retry(link);
 		return;
 	} else if (ret == 0) {
-		LOGP(DINP, LOGL_ERROR, "connection closed with server\n");
+		LOGP(DLINP, LOGL_ERROR, "connection closed with server\n");
 		ipa_client_retry(link);
 		return;
 	}
@@ -146,7 +146,7 @@
 	struct llist_head *lh;
 	int ret;
 
-	LOGP(DINP, LOGL_NOTICE, "sending data\n");
+	LOGP(DLINP, LOGL_NOTICE, "sending data\n");
 
 	if (llist_empty(&link->tx_queue)) {
 		ofd->when &= ~BSC_FD_WRITE;
@@ -161,7 +161,7 @@
 		if (errno == EPIPE || errno == ENOTCONN) {
 			ipa_client_retry(link);
 		}
-		LOGP(DINP, LOGL_ERROR, "error to send\n");
+		LOGP(DLINP, LOGL_ERROR, "error to send\n");
 	}
 	msgb_free(msg);
 	return 0;
@@ -181,18 +181,18 @@
 			return 0;
 		}
 		ofd->when &= ~BSC_FD_WRITE;
-		LOGP(DINP, LOGL_NOTICE, "connection done.\n");
+		LOGP(DLINP, LOGL_NOTICE, "connection done.\n");
 		link->state = IPA_CLIENT_LINK_STATE_CONNECTED;
 		if (link->connect_cb)
 			link->connect_cb(link);
 		break;
 	case IPA_CLIENT_LINK_STATE_CONNECTED:
 		if (what & BSC_FD_READ) {
-			LOGP(DINP, LOGL_NOTICE, "connected read\n");
+			LOGP(DLINP, LOGL_NOTICE, "connected read\n");
 			ipa_client_read(link);
 		}
 		if (what & BSC_FD_WRITE) {
-			LOGP(DINP, LOGL_NOTICE, "connected write\n");
+			LOGP(DLINP, LOGL_NOTICE, "connected write\n");
 			ipa_client_write(link);
 		}
 		break;
@@ -284,7 +284,7 @@
 {
 	struct ipa_client_link *link = data;
 
-	LOGP(DINP, LOGL_NOTICE, "reconnecting.\n");
+	LOGP(DLINP, LOGL_NOTICE, "reconnecting.\n");
 
 	switch(link->state) {
 	case IPA_CLIENT_LINK_STATE_CONNECTING:
@@ -310,11 +310,11 @@
 
 	ret = accept(ofd->fd, (struct sockaddr *)&sa, &sa_len);
 	if (ret < 0) {
-		LOGP(DINP, LOGL_ERROR, "failed to accept from origin "
+		LOGP(DLINP, LOGL_ERROR, "failed to accept from origin "
 			"peer, reason=`%s'\n", strerror(errno));
 		return ret;
 	}
-	LOGP(DINP, LOGL_NOTICE, "accept()ed new link from %s to port %u\n",
+	LOGP(DLINP, LOGL_NOTICE, "accept()ed new link from %s to port %u\n",
 		inet_ntoa(sa.sin_addr), link->port);
 
 	if (link->accept_cb)
@@ -382,18 +382,18 @@
 	struct msgb *msg;
 	int ret;
 
-	LOGP(DINP, LOGL_NOTICE, "message received\n");
+	LOGP(DLINP, LOGL_NOTICE, "message received\n");
 
 	ret = ipa_msg_recv(ofd->fd, &msg);
 	if (ret < 0) {
 		if (errno == EPIPE || errno == ECONNRESET) {
-			LOGP(DINP, LOGL_ERROR, "lost connection with server\n");
+			LOGP(DLINP, LOGL_ERROR, "lost connection with server\n");
 		} else {
-			LOGP(DINP, LOGL_ERROR, "unknown error\n");
+			LOGP(DLINP, LOGL_ERROR, "unknown error\n");
 		}
 		return;
 	} else if (ret == 0) {
-		LOGP(DINP, LOGL_ERROR, "connection closed with server\n");
+		LOGP(DLINP, LOGL_ERROR, "connection closed with server\n");
 		ipa_server_peer_destroy(peer);
 		return;
 	}
@@ -410,7 +410,7 @@
 	struct llist_head *lh;
 	int ret;
 
-	LOGP(DINP, LOGL_NOTICE, "sending data\n");
+	LOGP(DLINP, LOGL_NOTICE, "sending data\n");
 
 	if (llist_empty(&peer->tx_queue)) {
 		ofd->when &= ~BSC_FD_WRITE;
@@ -422,7 +422,7 @@
 
 	ret = send(peer->ofd.fd, msg->data, msg->len, 0);
 	if (ret < 0) {
-		LOGP(DINP, LOGL_ERROR, "error to send\n");
+		LOGP(DLINP, LOGL_ERROR, "error to send\n");
 	}
 	msgb_free(msg);
 }
@@ -431,7 +431,7 @@
 {
 	struct ipa_server_peer *peer = ofd->data;
 
-	LOGP(DINP, LOGL_NOTICE, "connected read/write\n");
+	LOGP(DLINP, LOGL_NOTICE, "connected read/write\n");
 	if (what & BSC_FD_READ)
 		ipa_server_peer_read(peer);
 	if (what & BSC_FD_WRITE)
@@ -449,7 +449,7 @@
 
 	peer = talloc_zero(ctx, struct ipa_server_peer);
 	if (peer == NULL) {
-		LOGP(DINP, LOGL_ERROR, "cannot allocate new peer in server, "
+		LOGP(DLINP, LOGL_ERROR, "cannot allocate new peer in server, "
 			"reason=`%s'\n", strerror(errno));
 		return NULL;
 	}
@@ -463,7 +463,7 @@
 	INIT_LLIST_HEAD(&peer->tx_queue);
 
 	if (osmo_fd_register(&peer->ofd) < 0) {
-		LOGP(DINP, LOGL_ERROR, "could not register FD\n");
+		LOGP(DLINP, LOGL_ERROR, "could not register FD\n");
 		talloc_free(peer);
 		return NULL;
 	}
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index 6d55132..07c8607 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -109,11 +109,11 @@
 		t_tag = *cur++;
 
 		if (t_len > len + 1) {
-			LOGP(DMI, LOGL_ERROR, "The tag does not fit: %d\n", t_len);
+			LOGP(DLMI, LOGL_ERROR, "The tag does not fit: %d\n", t_len);
 			return -EINVAL;
 		}
 
-		DEBUGPC(DMI, "%s='%s' ", ipaccess_idtag_name(t_tag), cur);
+		DEBUGPC(DLMI, "%s='%s' ", ipaccess_idtag_name(t_tag), cur);
 
 		dec->lv[t_tag].len = t_len;
 		dec->lv[t_tag].val = cur;
@@ -165,7 +165,7 @@
 	if (ret < 0)
 		return ret;
 	if (ret < msglen) {
-		LOGP(DINP, LOGL_ERROR, "ipaccess_send: short write\n");
+		LOGP(DLINP, LOGL_ERROR, "ipaccess_send: short write\n");
 		return -EIO;
 	}
 	return ret;
@@ -199,11 +199,11 @@
 		ret = ipaccess_send_pong(bfd->fd);
 		break;
 	case IPAC_MSGT_PONG:
-		DEBUGP(DMI, "PONG!\n");
+		DEBUGP(DLMI, "PONG!\n");
 		ipa_ccm = true;
 		break;
 	case IPAC_MSGT_ID_ACK:
-		DEBUGP(DMI, "ID_ACK? -> ACK!\n");
+		DEBUGP(DLMI, "ID_ACK? -> ACK!\n");
 		ipa_ccm = true;
 		ret = ipaccess_send_id_ack(bfd->fd);
 		break;
@@ -223,10 +223,10 @@
 		ret = ipaccess_send_pong(bfd->fd);
 		break;
 	case IPAC_MSGT_PONG:
-		DEBUGP(DMI, "PONG!\n");
+		DEBUGP(DLMI, "PONG!\n");
 		break;
 	case IPAC_MSGT_ID_ACK:
-		DEBUGP(DMI, "ID_ACK\n");
+		DEBUGP(DLMI, "ID_ACK\n");
 		break;
 	}
 	return 0;
@@ -242,7 +242,7 @@
 
 	/* Error case: we did not see any ID_RESP yet for this socket. */
 	if (bfd->fd != -1) {
-		LOGP(DINP, LOGL_ERROR, "Forcing socket shutdown with "
+		LOGP(DLINP, LOGL_ERROR, "Forcing socket shutdown with "
 					"no signal link set\n");
 		osmo_fd_unregister(bfd);
 		close(bfd->fd);
@@ -271,19 +271,19 @@
 
 	switch (msg_type) {
 	case IPAC_MSGT_ID_RESP:
-		DEBUGP(DMI, "ID_RESP\n");
+		DEBUGP(DLMI, "ID_RESP\n");
 		/* parse tags, search for Unit ID */
 		ret = ipaccess_idtag_parse(&tlvp, (uint8_t *)msg->l2h + 2,
 						msgb_l2len(msg)-2);
-		DEBUGP(DMI, "\n");
+		DEBUGP(DLMI, "\n");
 		if (ret < 0) {
-			LOGP(DINP, LOGL_ERROR, "IPA response message "
+			LOGP(DLINP, LOGL_ERROR, "IPA response message "
 				"with malformed TLVs\n");
 			ret = -EINVAL;
 			goto err;
 		}
 		if (!TLVP_PRESENT(&tlvp, IPAC_IDTAG_UNIT)) {
-			LOGP(DINP, LOGL_ERROR, "IPA response message "
+			LOGP(DLINP, LOGL_ERROR, "IPA response message "
 				"without unit ID\n");
 			ret = -EINVAL;
 			goto err;
@@ -291,7 +291,7 @@
 		}
 		len = TLVP_LEN(&tlvp, IPAC_IDTAG_UNIT);
 		if (len < 1) {
-			LOGP(DINP, LOGL_ERROR, "IPA response message "
+			LOGP(DLINP, LOGL_ERROR, "IPA response message "
 				"with too small unit ID\n");
 			ret = -EINVAL;
 			goto err;
@@ -301,7 +301,7 @@
 		ipaccess_parse_unitid(unitid, &unit_data);
 
 		if (!line->ops->sign_link_up) {
-			LOGP(DINP, LOGL_ERROR,
+			LOGP(DLINP, LOGL_ERROR,
 			     "Unable to set signal link, closing socket.\n");
 			ret = -EINVAL;
 			goto err;
@@ -312,7 +312,7 @@
 				line->ops->sign_link_up(&unit_data, line,
 							E1INP_SIGN_OML);
 			if (sign_link == NULL) {
-				LOGP(DINP, LOGL_ERROR,
+				LOGP(DLINP, LOGL_ERROR,
 					"Unable to set signal link, "
 					"closing socket.\n");
 				ret = -EINVAL;
@@ -327,7 +327,7 @@
 				line->ops->sign_link_up(&unit_data, line,
 							E1INP_SIGN_RSL);
 			if (sign_link == NULL) {
-				LOGP(DINP, LOGL_ERROR,
+				LOGP(DLINP, LOGL_ERROR,
 					"Unable to set signal link, "
 					"closing socket.\n");
 				ret = -EINVAL;
@@ -336,7 +336,7 @@
 			/* this is a bugtrap, the BSC should be using the
 			 * virtual E1 line used by OML for this RSL link. */
 			if (sign_link->ts->line == line) {
-				LOGP(DINP, LOGL_ERROR,
+				LOGP(DLINP, LOGL_ERROR,
 					"Fix your BSC, you should use the "
 					"E1 line used by the OML link for "
 					"your RSL link.\n");
@@ -360,7 +360,7 @@
 		}
 		break;
 	default:
-		LOGP(DINP, LOGL_ERROR, "Unknown IPA message type\n");
+		LOGP(DLINP, LOGL_ERROR, "Unknown IPA message type\n");
 		ret = -EINVAL;
 		goto err;
 	}
@@ -388,12 +388,12 @@
 		return error;
 	else if (error == 0) {
 		if (ipaccess_drop(bfd) >= 0) {
-			LOGP(DINP, LOGL_NOTICE, "Sign link vanished, "
+			LOGP(DLINP, LOGL_NOTICE, "Sign link vanished, "
 						"dead socket\n");
 		}
 		return error;
 	}
-	DEBUGP(DMI, "RX %u: %s\n", ts_nr, osmo_hexdump(msgb_l2(msg), msgb_l2len(msg)));
+	DEBUGP(DLMI, "RX %u: %s\n", ts_nr, osmo_hexdump(msgb_l2(msg), msgb_l2len(msg)));
 
 	hh = (struct ipaccess_head *) msg->data;
 	if (hh->proto == IPAC_PROTO_IPACCESS) {
@@ -406,7 +406,7 @@
 
 	link = e1inp_lookup_sign_link(e1i_ts, hh->proto, 0);
 	if (!link) {
-		LOGP(DINP, LOGL_ERROR, "no matching signalling link for "
+		LOGP(DLINP, LOGL_ERROR, "no matching signalling link for "
 			"hh->proto=0x%02x\n", hh->proto);
 		msgb_free(msg);
 		return -EIO;
@@ -415,13 +415,13 @@
 
 	/* XXX better use e1inp_ts_rx? */
 	if (!e1i_ts->line->ops->sign_link) {
-		LOGP(DINP, LOGL_ERROR, "Fix your application, "
+		LOGP(DLINP, LOGL_ERROR, "Fix your application, "
 			"no action set for signalling messages.\n");
 		ret = -EINVAL;
 		goto err;
 	}
 	if (e1i_ts->line->ops->sign_link(msg) < 0) {
-		LOGP(DINP, LOGL_ERROR, "Bad signalling message,"
+		LOGP(DLINP, LOGL_ERROR, "Bad signalling message,"
 				       "closing socket.\n");
 		ret = -EINVAL;
 		goto err;
@@ -513,7 +513,7 @@
 	msg->l2h = msg->data;
 	ipaccess_prepend_header(msg, sign_link->tei);
 
-	DEBUGP(DMI, "TX %u: %s\n", ts_nr, osmo_hexdump(msg->l2h, msgb_l2len(msg)));
+	DEBUGP(DLMI, "TX %u: %s\n", ts_nr, osmo_hexdump(msg->l2h, msgb_l2len(msg)));
 
 	ret = send(bfd->fd, msg->data, msg->len, 0);
 	msgb_free(msg);
@@ -579,7 +579,7 @@
 	/* clone virtual E1 line for this new OML link. */
 	line = e1inp_line_clone(tall_ipa_ctx, link->line);
 	if (line == NULL) {
-		LOGP(DINP, LOGL_ERROR, "could not clone E1 line\n");
+		LOGP(DLINP, LOGL_ERROR, "could not clone E1 line\n");
 		return -1;
 	}
 
@@ -600,7 +600,7 @@
 	bfd->when = BSC_FD_READ;
 	ret = osmo_fd_register(bfd);
 	if (ret < 0) {
-		LOGP(DINP, LOGL_ERROR, "could not register FD\n");
+		LOGP(DLINP, LOGL_ERROR, "could not register FD\n");
 		close(bfd->fd);
 		e1inp_line_put(line);
 		return ret;
@@ -623,7 +623,7 @@
          * allocate a temporary E1 line until we have received ID. */
 	line = e1inp_line_clone(tall_ipa_ctx, link->line);
 	if (line == NULL) {
-		LOGP(DINP, LOGL_ERROR, "could not clone E1 line\n");
+		LOGP(DLINP, LOGL_ERROR, "could not clone E1 line\n");
 		return -1;
 	}
 	/* initialize the fds */
@@ -644,7 +644,7 @@
 	bfd->when = BSC_FD_READ;
 	ret = osmo_fd_register(bfd);
 	if (ret < 0) {
-		LOGP(DINP, LOGL_ERROR, "could not register FD\n");
+		LOGP(DLINP, LOGL_ERROR, "could not register FD\n");
 		close(bfd->fd);
 		e1inp_line_put(line);
 		return ret;
@@ -669,7 +669,7 @@
 	*msgb_put(nmsg, 1) = IPAC_MSGT_ID_RESP;
 	while (len) {
 		if (len < 2) {
-			LOGP(DINP, LOGL_NOTICE,
+			LOGP(DLINP, LOGL_NOTICE,
 				"Short read of ipaccess tag\n");
 			msgb_free(nmsg);
 			return NULL;
@@ -708,12 +708,12 @@
 			strcpy(str, dev->serno);
 			break;
 		default:
-			LOGP(DINP, LOGL_NOTICE,
+			LOGP(DLINP, LOGL_NOTICE,
 				"Unknown ipaccess tag 0x%02x\n", *data);
 			msgb_free(nmsg);
 			return NULL;
 		}
-		LOGP(DINP, LOGL_INFO, " tag %d: %s\n", data[1], str);
+		LOGP(DLINP, LOGL_INFO, " tag %d: %s\n", data[1], str);
 		tag = msgb_put(nmsg, 3 + strlen(str) + 1);
 		tag[0] = 0x00;
 		tag[1] = 1 + strlen(str) + 1;
@@ -760,9 +760,9 @@
 			uint8_t *data = msgb_l2(msg);
 			int len = msgb_l2len(msg);
 
-			LOGP(DINP, LOGL_NOTICE, "received ID get\n");
+			LOGP(DLINP, LOGL_NOTICE, "received ID get\n");
 			if (!link->line->ops->sign_link_up) {
-				LOGP(DINP, LOGL_ERROR,
+				LOGP(DLINP, LOGL_ERROR,
 					"Unable to set signal link, "
 					"closing socket.\n");
 				osmo_fd_unregister(link->ofd);
@@ -774,7 +774,7 @@
 					link->line,
 					link->ofd->priv_nr);
 			if (sign_link == NULL) {
-				LOGP(DINP, LOGL_ERROR,
+				LOGP(DLINP, LOGL_ERROR,
 					"Unable to set signal link, "
 					"closing socket.\n");
 				osmo_fd_unregister(link->ofd);
@@ -801,7 +801,7 @@
 	/* look up for some existing signaling link. */
 	sign_link = e1inp_lookup_sign_link(e1i_ts, hh->proto, 0);
 	if (sign_link == NULL) {
-		LOGP(DINP, LOGL_ERROR, "no matching signalling link for "
+		LOGP(DLINP, LOGL_ERROR, "no matching signalling link for "
 			"hh->proto=0x%02x\n", hh->proto);
 		msgb_free(msg);
 		return -EIO;
@@ -810,7 +810,7 @@
 
 	/* XXX better use e1inp_ts_rx? */
 	if (!link->line->ops->sign_link) {
-		LOGP(DINP, LOGL_ERROR, "Fix your application, "
+		LOGP(DLINP, LOGL_ERROR, "Fix your application, "
 			"no action set for signalling messages.\n");
 		return -ENOENT;
 	}
@@ -827,18 +827,18 @@
 	case E1INP_LINE_R_BSC: {
 		struct ipa_server_link *oml_link, *rsl_link;
 
-		LOGP(DINP, LOGL_NOTICE, "enabling ipaccess BSC mode\n");
+		LOGP(DLINP, LOGL_NOTICE, "enabling ipaccess BSC mode\n");
 
 		oml_link = ipa_server_link_create(tall_ipa_ctx, line,
 					          "0.0.0.0", IPA_TCP_PORT_OML,
 						  ipaccess_bsc_oml_cb, NULL);
 		if (oml_link == NULL) {
-			LOGP(DINP, LOGL_ERROR, "cannot create OML "
+			LOGP(DLINP, LOGL_ERROR, "cannot create OML "
 				"BSC link: %s\n", strerror(errno));
 			return -ENOMEM;
 		}
 		if (ipa_server_link_open(oml_link) < 0) {
-			LOGP(DINP, LOGL_ERROR, "cannot open OML BSC link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot open OML BSC link: %s\n",
 				strerror(errno));
 			ipa_server_link_close(oml_link);
 			ipa_server_link_destroy(oml_link);
@@ -848,12 +848,12 @@
 						  "0.0.0.0", IPA_TCP_PORT_RSL,
 						  ipaccess_bsc_rsl_cb, NULL);
 		if (rsl_link == NULL) {
-			LOGP(DINP, LOGL_ERROR, "cannot create RSL "
+			LOGP(DLINP, LOGL_ERROR, "cannot create RSL "
 				"BSC link: %s\n", strerror(errno));
 			return -ENOMEM;
 		}
 		if (ipa_server_link_open(rsl_link) < 0) {
-			LOGP(DINP, LOGL_ERROR, "cannot open RSL BSC link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot open RSL BSC link: %s\n",
 				strerror(errno));
 			ipa_server_link_close(rsl_link);
 			ipa_server_link_destroy(rsl_link);
@@ -865,7 +865,7 @@
 	case E1INP_LINE_R_BTS: {
 		struct ipa_client_link *link, *rsl_link;
 
-		LOGP(DINP, LOGL_NOTICE, "enabling ipaccess BTS mode\n");
+		LOGP(DLINP, LOGL_NOTICE, "enabling ipaccess BTS mode\n");
 
 		link = ipa_client_link_create(tall_ipa_ctx,
 					      &line->ts[E1INP_SIGN_OML-1],
@@ -876,12 +876,12 @@
 					      ipaccess_bts_write_cb,
 					      NULL);
 		if (link == NULL) {
-			LOGP(DINP, LOGL_ERROR, "cannot create OML "
+			LOGP(DLINP, LOGL_ERROR, "cannot create OML "
 				"BTS link: %s\n", strerror(errno));
 			return -ENOMEM;
 		}
 		if (ipa_client_link_open(link) < 0) {
-			LOGP(DINP, LOGL_ERROR, "cannot open OML BTS link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot open OML BTS link: %s\n",
 				strerror(errno));
 			ipa_client_link_close(link);
 			ipa_client_link_destroy(link);
@@ -896,12 +896,12 @@
 						  ipaccess_bts_write_cb,
 						  NULL);
 		if (rsl_link == NULL) {
-			LOGP(DINP, LOGL_ERROR, "cannot create RSL "
+			LOGP(DLINP, LOGL_ERROR, "cannot create RSL "
 				"BTS link: %s\n", strerror(errno));
 			return -ENOMEM;
 		}
 		if (ipa_client_link_open(rsl_link) < 0) {
-			LOGP(DINP, LOGL_ERROR, "cannot open RSL BTS link: %s\n",
+			LOGP(DLINP, LOGL_ERROR, "cannot open RSL BTS link: %s\n",
 				strerror(errno));
 			ipa_client_link_close(rsl_link);
 			ipa_client_link_destroy(rsl_link);
diff --git a/src/input/lapd.c b/src/input/lapd.c
index 44031bd..0d4cfc4 100644
--- a/src/input/lapd.c
+++ b/src/input/lapd.c
@@ -192,7 +192,7 @@
 
 static void lapd_tei_set_state(struct lapd_tei *teip, int newstate)
 {
-	DEBUGP(DMI, "state change on TEI %d: %s -> %s\n", teip->tei,
+	DEBUGP(DLMI, "state change on TEI %d: %s -> %s\n", teip->tei,
 		   lapd_tei_states[teip->state], lapd_tei_states[newstate]);
 	teip->state = newstate;
 };
@@ -236,7 +236,7 @@
 {
 	struct lapd_sap *sap = talloc_zero(teip, struct lapd_sap);
 
-	LOGP(DMI, LOGL_INFO, "Allocating SAP for SAPI=%u / TEI=%u\n",
+	LOGP(DLMI, LOGL_INFO, "Allocating SAP for SAPI=%u / TEI=%u\n",
 		sapi, teip->tei);
 
 	sap->sapi = sapi;
@@ -256,7 +256,7 @@
 	if (!sap)
 		return;
 
-	DEBUGP(DMI, "state change on TEI %u / SAPI %u: %s -> %s\n", teip->tei,
+	DEBUGP(DLMI, "state change on TEI %u / SAPI %u: %s -> %s\n", teip->tei,
 		sapi, lapd_sap_states[sap->state], lapd_sap_states[newstate]);
 	switch (sap->state) {
 	case SAP_STATE_SABM_RETRANS:
@@ -283,15 +283,15 @@
 	uint8_t resp[8];
 	struct lapd_tei *teip;
 
-	DEBUGP(DMI, "TEIMGR: entity %x, ref %x, mt %x, action %x, e %x\n", entity, ref, mt, action, e);
+	DEBUGP(DLMI, "TEIMGR: entity %x, ref %x, mt %x, action %x, e %x\n", entity, ref, mt, action, e);
 
 	switch (mt) {
 	case 0x01:	/* IDENTITY REQUEST */
-		DEBUGP(DMI, "TEIMGR: identity request for TEI %u\n", action);
+		DEBUGP(DLMI, "TEIMGR: identity request for TEI %u\n", action);
 
 		teip = teip_from_tei(li, action);
 		if (!teip) {
-			LOGP(DMI, LOGL_INFO, "TEI MGR: New TEI %u\n", action);
+			LOGP(DLMI, LOGL_INFO, "TEI MGR: New TEI %u\n", action);
 			teip = lapd_tei_alloc(li, action);
 		}
 
@@ -304,7 +304,7 @@
 			lapd_tei_set_state(teip, LAPD_TEI_ASSIGNED);
 		break;
 	default:
-		LOGP(DMI, LOGL_NOTICE, "TEIMGR: unknown mt %x action %x\n",
+		LOGP(DLMI, LOGL_NOTICE, "TEIMGR: unknown mt %x action %x\n",
 		     mt, action);
 		break;
 	};
@@ -327,12 +327,12 @@
 	*prim = 0;
 
 	if (len < 2) {
-		DEBUGP(DMI, "len %d < 2\n", len);
+		DEBUGP(DLMI, "len %d < 2\n", len);
 		return NULL;
 	};
 
 	if ((data[0] & 1) != 0 || (data[1] & 1) != 1) {
-		DEBUGP(DMI, "address field %x/%x not well formed\n", data[0],
+		DEBUGP(DLMI, "address field %x/%x not well formed\n", data[0],
 			   data[1]);
 		return NULL;
 	};
@@ -341,10 +341,10 @@
 	cr = (data[0] >> 1) & 1;
 	tei = data[1] >> 1;
 	command = li->network_side ^ cr;
-	//DEBUGP(DMI, "  address sapi %x tei %d cmd %d cr %d\n", sapi, tei, command, cr);
+	//DEBUGP(DLMI, "  address sapi %x tei %d cmd %d cr %d\n", sapi, tei, command, cr);
 
 	if (len < 3) {
-		DEBUGP(DMI, "len %d < 3\n", len);
+		DEBUGP(DLMI, "len %d < 3\n", len);
 		return NULL;
 	};
 
@@ -376,7 +376,7 @@
 			cmd = LAPD_CMD_REJ;
 			break;
 		default:
-			LOGP(DMI, LOGL_ERROR, "unknown LAPD S cmd %x\n", data[2]);
+			LOGP(DLMI, LOGL_ERROR, "unknown LAPD S cmd %x\n", data[2]);
 			return NULL;
 		};
 	} else if ((data[2] & 3) == 3) {
@@ -407,7 +407,7 @@
 			break;
 
 		default:
-			LOGP(DMI, LOGL_ERROR, "unknown U cmd %x "
+			LOGP(DLMI, LOGL_ERROR, "unknown U cmd %x "
 			     "(pf %x data %x)\n", val, pf, data[2]);
 			return NULL;
 		};
@@ -423,18 +423,18 @@
 
 	teip = teip_from_tei(li, tei);
 	if (!teip) {
-		LOGP(DMI, LOGL_NOTICE, "Unknown TEI %u\n", tei);
+		LOGP(DLMI, LOGL_NOTICE, "Unknown TEI %u\n", tei);
 		return NULL;
 	}
 
 	sap = lapd_sap_find(teip, sapi);
 	if (!sap) {
-		LOGP(DMI, LOGL_INFO, "No SAP for TEI=%u / SAPI=%u, "
+		LOGP(DLMI, LOGL_INFO, "No SAP for TEI=%u / SAPI=%u, "
 			"allocating\n", tei, sapi);
 		sap = lapd_sap_alloc(teip, sapi);
 	}
 
-	DEBUGP(DMI, "<- %c %s sapi %x tei %3d cmd %x pf %x ns %3d nr %3d "
+	DEBUGP(DLMI, "<- %c %s sapi %x tei %3d cmd %x pf %x ns %3d nr %3d "
 	     "ilen %d teip %p vs %d va %d vr %d len %d\n",
 	     lapd_msg_types[typ], lapd_cmd_types[cmd], sapi, tei, command, pf,
 	     ns, nr, *ilen, teip, sap->vs, sap->va, sap->vr, len);
@@ -442,9 +442,9 @@
 	switch (cmd) {
 	case LAPD_CMD_I:
 		if (ns != sap->vr) {
-			DEBUGP(DMI, "ns %d != vr %d\n", ns, sap->vr);
+			DEBUGP(DLMI, "ns %d != vr %d\n", ns, sap->vr);
 			if (ns == ((sap->vr - 1) & 0x7f)) {
-				DEBUGP(DMI, "DOUBLE FRAME, ignoring\n");
+				DEBUGP(DLMI, "DOUBLE FRAME, ignoring\n");
 				cmd = 0;	// ignore
 			} else {
 				assert(0);
@@ -474,7 +474,7 @@
 				//printf("ASSIGNED and ACTIVE\n");
 			} else {
 #if 0
-				DEBUGP(DMI, "rr in strange state, send rej\n");
+				DEBUGP(DLMI, "rr in strange state, send rej\n");
 
 				// rej
 				resp[l++] = (sap-> sapi << 2) | (li->network_side ? 0 : 2);
@@ -507,7 +507,7 @@
 				//printf("ASSIGNED and ACTIVE\n");
 			} else {
 #if 0
-				DEBUGP(DMI, "rr in strange " "state, send rej\n");
+				DEBUGP(DLMI, "rr in strange " "state, send rej\n");
 
 				// rej
 				resp[l++] = (sap-> sapi << 2) | (li->network_side ? 0 : 2);
@@ -539,7 +539,7 @@
 			*prim = LAPD_MPH_DEACTIVATE_IND;
 		lapd_tei_set_state(teip, LAPD_TEI_ASSIGNED);
 #endif
-		LOGP(DMI, LOGL_NOTICE, "frame reject, ignoring\n");
+		LOGP(DLMI, LOGL_NOTICE, "frame reject, ignoring\n");
 		break;
 	case LAPD_CMD_DISC:
 		// disconnect
@@ -550,7 +550,7 @@
 		lapd_tei_set_state(teip, LAPD_TEI_NONE);
 		break;
 	default:
-		LOGP(DMI, LOGL_NOTICE, "unknown cmd for tei %d (cmd %x)\n",
+		LOGP(DLMI, LOGL_NOTICE, "unknown cmd for tei %d (cmd %x)\n",
 		     tei, cmd);
 		break;
 	}
@@ -562,7 +562,7 @@
 		 */
 
 		/* interrogating us, send rr */
-		DEBUGP(DMI, "Sending RR response\n");
+		DEBUGP(DLMI, "Sending RR response\n");
 		resp[l++] = data[0];
 		resp[l++] = (tei << 1) | 1;
 		resp[l++] = 0x01;	// rr
@@ -589,7 +589,7 @@
 	if (!msg)
 		return -ENOMEM;
 
-	DEBUGP(DMI, "Sending SABM for TEI=%u, SAPI=%u\n", tei, sapi);
+	DEBUGP(DLMI, "Sending SABM for TEI=%u, SAPI=%u\n", tei, sapi);
 
 	msgb_put_u8(msg, (sapi << 2) | (li->network_side ? 2 : 0));
 	msgb_put_u8(msg, (tei << 1) | 1);
@@ -664,14 +664,14 @@
 	struct lapd_sap *sap;
 
 	if (!teip) {
-		LOGP(DMI, LOGL_ERROR, "Cannot transmit on non-existing "
+		LOGP(DLMI, LOGL_ERROR, "Cannot transmit on non-existing "
 		     "TEI %u\n", tei);
 		return;
 	}
 
 	sap = lapd_sap_find(teip, sapi);
 	if (!sap) {
-		LOGP(DMI, LOGL_INFO, "Tx on unknown SAPI=%u in TEI=%u, "
+		LOGP(DLMI, LOGL_INFO, "Tx on unknown SAPI=%u in TEI=%u, "
 			"allocating\n", sapi, tei);
 		sap = lapd_sap_alloc(teip, sapi);
 	}
diff --git a/src/input/misdn.c b/src/input/misdn.c
index dce4f42..dc8d10f 100644
--- a/src/input/misdn.c
+++ b/src/input/misdn.c
@@ -114,21 +114,21 @@
 
 	msgb_put(msg, ret);
 
-	DEBUGP(DMI, "alen =%d, dev(%d) channel(%d) sapi(%d) tei(%d)\n",
+	DEBUGP(DLMI, "alen =%d, dev(%d) channel(%d) sapi(%d) tei(%d)\n",
 		alen, l2addr.dev, l2addr.channel, l2addr.sapi, l2addr.tei);
 
-	DEBUGP(DMI, "<= len = %d, prim(0x%x) id(0x%x): %s\n",
+	DEBUGP(DLMI, "<= len = %d, prim(0x%x) id(0x%x): %s\n",
 		ret, hh->prim, hh->id, get_prim_name(hh->prim));
 
 	switch (hh->prim) {
 	case DL_INFORMATION_IND:
 		/* mISDN tells us which channel number is allocated for this
 		 * tuple of (SAPI, TEI). */
-		DEBUGP(DMI, "DL_INFORMATION_IND: use channel(%d) sapi(%d) tei(%d) for now\n",
+		DEBUGP(DLMI, "DL_INFORMATION_IND: use channel(%d) sapi(%d) tei(%d) for now\n",
 			l2addr.channel, l2addr.sapi, l2addr.tei);
 		link = e1inp_lookup_sign_link(e1i_ts, l2addr.tei, l2addr.sapi);
 		if (!link) {
-			DEBUGPC(DMI, "mISDN message for unknown sign_link\n");
+			DEBUGPC(DLMI, "mISDN message for unknown sign_link\n");
 			msgb_free(msg);
 			return -EINVAL;
 		}
@@ -136,14 +136,14 @@
 		link->driver.misdn.channel = l2addr.channel;
 		break;
 	case DL_ESTABLISH_IND:
-		DEBUGP(DMI, "DL_ESTABLISH_IND: channel(%d) sapi(%d) tei(%d)\n",
+		DEBUGP(DLMI, "DL_ESTABLISH_IND: channel(%d) sapi(%d) tei(%d)\n",
 			l2addr.channel, l2addr.sapi, l2addr.tei);
 		/* For some strange reason, sometimes the DL_INFORMATION_IND tells
 		 * us the wrong channel, and we only get the real channel number
 		 * during the DL_ESTABLISH_IND */
 		link = e1inp_lookup_sign_link(e1i_ts, l2addr.tei, l2addr.sapi);
 		if (!link) {
-			DEBUGPC(DMI, "mISDN message for unknown sign_link\n");
+			DEBUGPC(DLMI, "mISDN message for unknown sign_link\n");
 			msgb_free(msg);
 			return -EINVAL;
 		}
@@ -152,22 +152,22 @@
 		ret = e1inp_event(e1i_ts, S_INP_TEI_UP, l2addr.tei, l2addr.sapi);
 		break;
 	case DL_RELEASE_IND:
-		DEBUGP(DMI, "DL_RELEASE_IND: channel(%d) sapi(%d) tei(%d)\n",
+		DEBUGP(DLMI, "DL_RELEASE_IND: channel(%d) sapi(%d) tei(%d)\n",
 		l2addr.channel, l2addr.sapi, l2addr.tei);
 		ret = e1inp_event(e1i_ts, S_INP_TEI_DN, l2addr.tei, l2addr.sapi);
 		break;
 	case DL_DATA_IND:
 	case DL_UNITDATA_IND:
 		msg->l2h = msg->data + MISDN_HEADER_LEN;
-		DEBUGP(DMI, "RX: %s\n", osmo_hexdump(msgb_l2(msg), ret - MISDN_HEADER_LEN));
+		DEBUGP(DLMI, "RX: %s\n", osmo_hexdump(msgb_l2(msg), ret - MISDN_HEADER_LEN));
 		ret = e1inp_rx_ts(e1i_ts, msg, l2addr.tei, l2addr.sapi);
 		break;
 	case PH_ACTIVATE_IND:
-		DEBUGP(DMI, "PH_ACTIVATE_IND: channel(%d) sapi(%d) tei(%d)\n",
+		DEBUGP(DLMI, "PH_ACTIVATE_IND: channel(%d) sapi(%d) tei(%d)\n",
 		l2addr.channel, l2addr.sapi, l2addr.tei);
 		break;
 	case PH_DEACTIVATE_IND:
-		DEBUGP(DMI, "PH_DEACTIVATE_IND: channel(%d) sapi(%d) tei(%d)\n",
+		DEBUGP(DLMI, "PH_DEACTIVATE_IND: channel(%d) sapi(%d) tei(%d)\n",
 		l2addr.channel, l2addr.sapi, l2addr.tei);
 		break;
 	default:
@@ -224,7 +224,7 @@
 	hh = (struct mISDNhead *) msgb_push(msg, sizeof(*hh));
 	hh->prim = DL_DATA_REQ;
 
-	DEBUGP(DMI, "TX channel(%d) TEI(%d) SAPI(%d): %s\n",
+	DEBUGP(DLMI, "TX channel(%d) TEI(%d) SAPI(%d): %s\n",
 		sign_link->driver.misdn.channel, sign_link->tei,
 		sign_link->sapi, osmo_hexdump(l2_data, msg->len - MISDN_HEADER_LEN));
 
@@ -265,12 +265,12 @@
 
 	subchan_mux_out(mx, tx_buf+sizeof(*hh), BCHAN_TX_GRAN);
 
-	DEBUGP(DMIB, "BCHAN TX: %s\n",
+	DEBUGP(DLMIB, "BCHAN TX: %s\n",
 		osmo_hexdump(tx_buf+sizeof(*hh), BCHAN_TX_GRAN));
 
 	ret = send(bfd->fd, tx_buf, sizeof(*hh) + BCHAN_TX_GRAN, 0);
 	if (ret < sizeof(*hh) + BCHAN_TX_GRAN)
-		DEBUGP(DMIB, "send returns %d instead of %zu\n", ret,
+		DEBUGP(DLMIB, "send returns %d instead of %zu\n", ret,
 			sizeof(*hh) + BCHAN_TX_GRAN);
 
 	return ret;
@@ -301,13 +301,13 @@
 	msgb_put(msg, ret);
 
 	if (hh->prim != PH_CONTROL_IND)
-		DEBUGP(DMIB, "<= BCHAN len = %d, prim(0x%x) id(0x%x): %s\n",
+		DEBUGP(DLMIB, "<= BCHAN len = %d, prim(0x%x) id(0x%x): %s\n",
 			ret, hh->prim, hh->id, get_prim_name(hh->prim));
 
 	switch (hh->prim) {
 	case PH_DATA_IND:
 		msg->l2h = msg->data + MISDN_HEADER_LEN;
-		DEBUGP(DMIB, "BCHAN RX: %s\n",
+		DEBUGP(DLMIB, "BCHAN RX: %s\n",
 			osmo_hexdump(msgb_l2(msg), ret - MISDN_HEADER_LEN));
 		ret = e1inp_rx_ts(e1i_ts, msg, 0, 0);
 		break;
@@ -443,7 +443,7 @@
 			addr.channel = ts;
 			break;
 		default:
-			DEBUGP(DMI, "unsupported E1 TS type: %u\n",
+			DEBUGP(DLMI, "unsupported E1 TS type: %u\n",
 				e1i_ts->type);
 			break;
 		}
@@ -503,7 +503,7 @@
 		close(sk);
 		return -ENODEV;
 	}
-	//DEBUGP(DMI,"%d device%s found\n", cnt, (cnt==1)?"":"s");
+	//DEBUGP(DLMI,"%d device%s found\n", cnt, (cnt==1)?"":"s");
 	printf("%d device%s found\n", cnt, (cnt==1)?"":"s");
 #if 1
 	devinfo.id = line->num;
