osmo_io: Log error message in case call-backs incompatible with mode

Change-Id: I50ba6a76c0144f249d67488874a6c4edf01ec6f2
diff --git a/src/core/osmo_io.c b/src/core/osmo_io.c
index f0d213c..bcd4add 100644
--- a/src/core/osmo_io.c
+++ b/src/core/osmo_io.c
@@ -51,6 +51,13 @@
 	{ 0, NULL }
 };
 
+const struct value_string osmo_iofd_mode_names[] = {
+	{ OSMO_IO_FD_MODE_READ_WRITE, "read/write" },
+	{ OSMO_IO_FD_MODE_RECVFROM_SENDTO, "recvfrom/sendto" },
+	{ OSMO_IO_FD_MODE_RECVMSG_SENDMSG, "recvmsg/sendmsg" },
+	{ 0, NULL }
+};
+
 static enum osmo_io_backend g_io_backend;
 
 /* Used by some tests, can't be static */
@@ -619,8 +626,11 @@
 		return NULL;
 	}
 
-	if (ioops && !check_mode_callback_compat(mode, ioops))
+	if (ioops && !check_mode_callback_compat(mode, ioops)) {
+		LOGP(DLIO, LOGL_ERROR, "iofd(%s): rejecting call-backs incompatible with mode %s\n",
+			name ? name : "unknown", osmo_iofd_mode_name(mode));
 		return NULL;
+	}
 
 	iofd = talloc_zero(ctx, struct osmo_io_fd);
 	if (!iofd)
@@ -868,8 +878,11 @@
  *  \param[in] ioops osmo_io_ops structure to be set */
 int osmo_iofd_set_ioops(struct osmo_io_fd *iofd, const struct osmo_io_ops *ioops)
 {
-	if (!check_mode_callback_compat(iofd->mode, ioops))
+	if (!check_mode_callback_compat(iofd->mode, ioops)) {
+		LOGPIO(iofd, LOGL_ERROR, "rejecting call-backs incompatible with mode %s\n",
+			osmo_iofd_mode_name(iofd->mode));
 		return -EINVAL;
+	}
 
 	iofd->io_ops = *ioops;