From f558ed4bb9c0f00997b8f97c2b251a574c1a64c4 Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Tue, 2 Jun 2015 15:52:06 +0200 Subject: 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. --- tests/utils/utils_test.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'tests/utils') diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c index b21b074b..1a79baa3 100644 --- a/tests/utils/utils_test.c +++ b/tests/utils/utils_test.c @@ -20,6 +20,9 @@ * */ +#include + +#include #include #include @@ -40,8 +43,66 @@ static void hexdump_test(void) 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; } -- cgit v1.2.3