ipa: Properly parse LV stream of a ID_GET request

For some reason the structure is closer to be a LV (length
and value). The value is actually a tag but it is counted
inside the length. Introduce an overload of the parse function
to provide an offset for the length. This will be taken from
the returned length.
diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c
index b21b074..1a79baa 100644
--- a/tests/utils/utils_test.c
+++ b/tests/utils/utils_test.c
@@ -20,6 +20,9 @@
  *
  */
 
+#include <osmocom/gsm/ipa.h>
+
+#include <osmocom/core/logging.h>
 #include <osmocom/core/utils.h>
 
 #include <stdio.h>
@@ -40,8 +43,66 @@
 	printf("%s\n", osmo_hexdump_nospc(data, ARRAY_SIZE(data)));
 }
 
+static void test_idtag_parsing(void)
+{
+	struct tlv_parsed tvp;
+	int rc;
+
+        static uint8_t data[] = {
+		0x01, 0x08,
+		0x01, 0x07,
+		0x01, 0x02,
+		0x01, 0x03,
+		0x01, 0x04,
+		0x01, 0x05,
+		0x01, 0x01,
+		0x01, 0x00,
+		0x11, 0x23, 0x4e, 0x6a, 0x28, 0xd2, 0xa2, 0x53, 0x3a, 0x2a, 0x82, 0xa7, 0x7a, 0xef, 0x29, 0xd4, 0x44, 0x30,
+		0x11, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+        };
+
+	rc = ipa_ccm_idtag_parse_off(&tvp, data, sizeof(data), 1);
+	OSMO_ASSERT(rc == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 8));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 8) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 7));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 7) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 2));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 2) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 3));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 3) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 4));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 4) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 5));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 5) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 1));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 1) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 0));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 0) == 0);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 0x23));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 0x23) == 16);
+
+	OSMO_ASSERT(TLVP_PRESENT(&tvp, 0x24));
+	OSMO_ASSERT(TLVP_LEN(&tvp, 0x24) == 16);
+
+	OSMO_ASSERT(!TLVP_PRESENT(&tvp, 0x25));
+}
+
 int main(int argc, char **argv)
 {
+	static const struct log_info log_info = {};
+	log_init(&log_info, NULL);
+
 	hexdump_test();
+	test_idtag_parsing();
 	return 0;
 }