[misc] Sanity check and error messages in misdn.c

Add some sanity checks, add some error checks, print
the __func__ in the error message too.

Patch from Andreas Eversberg
diff --git a/src/input/misdn.c b/src/input/misdn.c
index a5860a0..6b3cb6f 100644
--- a/src/input/misdn.c
+++ b/src/input/misdn.c
@@ -114,8 +114,10 @@
 		return ret;
 	}
 
-	if (alen != sizeof(l2addr))
+	if (alen != sizeof(l2addr)) {
+		fprintf(stderr, "%s error len\n", __func__);
 		return -EINVAL;
+	}
 
 	msgb_put(msg, ret);
 
@@ -129,7 +131,7 @@
 	case DL_INFORMATION_IND:
 		/* mISDN tells us which channel number is allocated for this
 		 * tuple of (SAPI, TEI). */
-		DEBUGP(DMI, "use channel(%d) sapi(%d) tei(%d) for now\n",
+		DEBUGP(DMI, "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) {
@@ -182,8 +184,8 @@
 	hh = (struct mISDNhead *) msgb_push(msg, sizeof(*hh));
 	hh->prim = DL_DATA_REQ;
 
-	DEBUGP(DMI, "TX TEI(%d): %s\n", sign_link->tei,
-		hexdump(l2_data, msg->len - MISDN_HEADER_LEN));
+	DEBUGP(DMI, "TX TEI(%d) SAPI(%d): %s\n", sign_link->tei,
+		sign_link->sapi, hexdump(l2_data, msg->len - MISDN_HEADER_LEN));
 
 	/* construct the sockaddr */
 	sa.family = AF_ISDN;
@@ -193,6 +195,8 @@
 
 	ret = sendto(bfd->fd, msg->data, msg->len, 0,
 		     (struct sockaddr *)&sa, sizeof(sa));
+	if (ret < 0)
+		fprintf(stderr, "%s sendto failed %d\n", __func__, ret);
 	msgb_free(msg);
 
 	/* FIXME: this has to go */
@@ -253,8 +257,9 @@
 
 	msgb_put(msg, ret);
 
-	DEBUGP(DMIB, "<= BCHAN len = %d, prim(0x%x) id(0x%x): %s\n",
-		ret, hh->prim, hh->id, get_prim_name(hh->prim));
+	if (hh->prim != PH_CONTROL_IND)
+		DEBUGP(DMIB, "<= 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:
@@ -384,8 +389,8 @@
 		}
 
 		if (bfd->fd < 0) {
-			fprintf(stderr, "could not open socket %s\n",
-				strerror(errno));
+			fprintf(stderr, "%s could not open socket %s\n",
+				__func__, strerror(errno));
 			return bfd->fd;
 		}
 
@@ -466,14 +471,15 @@
 	/* open the ISDN card device */
 	sk = socket(PF_ISDN, SOCK_RAW, ISDN_P_BASE);
 	if (sk < 0) {
-		fprintf(stderr, "could not open socket %s\n", strerror(errno));
+		fprintf(stderr, "%s could not open socket %s\n",
+			__func__, strerror(errno));
 		return sk;
 	}
 
 	ret = ioctl(sk, IMGETCOUNT, &cnt);
 	if (ret) {
-		fprintf(stderr, "error getting interf count: %s\n",
-			strerror(errno));
+		fprintf(stderr, "%s error getting interf count: %s\n",
+			__func__, strerror(errno));
 		close(sk);
 		return -ENODEV;
 	}
@@ -495,6 +501,16 @@
 	fprintf(stdout, "        name:           %s\n", devinfo.name);
 #endif
 
+	if (!(devinfo.Dprotocols & (1 << ISDN_P_NT_E1))) {
+		fprintf(stderr, "error: card is not of type E1 (NT-mode)\n");
+		return -EINVAL;
+	}
+
+	if (devinfo.nrbchan != 30) {
+		fprintf(stderr, "error: E1 card has no 30 B-channels\n");
+		return -EINVAL;
+	}
+
 	ret = mi_e1_setup(line, release_l2);
 	if (ret)
 		return ret;