diff options
Diffstat (limited to 'tests/gsm0408/gsm0408_test.c')
-rw-r--r-- | tests/gsm0408/gsm0408_test.c | 387 |
1 files changed, 8 insertions, 379 deletions
diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index a86fe110..96178237 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -18,8 +18,6 @@ * */ -#pragma GCC diagnostic ignored "-Wdeprecated-declarations" - #include <string.h> #include <stdio.h> #include <stdlib.h> @@ -388,9 +386,8 @@ static const struct test_mid_encode_decode_test test_mid_encode_decode_tests[] = { .mi_type = GSM_MI_TYPE_IMSI | GSM_MI_ODD, .mi_str = "423423", - .expect_str = "", - .expect_rc = 1, - .mi_name = "unknown", + .mi_name = "IMSI-423423", + .expect_mi_tlv_hex = "1704413224f3", }, { .mi_type = GSM_MI_TYPE_IMSI, @@ -474,21 +471,21 @@ static const struct test_mid_encode_decode_test test_mid_encode_decode_tests[] = .mi_type = GSM_MI_TYPE_NONE, .mi_str = "123", .mi_name = "unknown", - .expect_mi_tlv_hex = "", + .expect_mi_tlv_hex = "17021832", /* encoding invalid MI type */ .expect_str = "", }, { .mi_type = GSM_MI_TYPE_NONE, .mi_str = "1234", .mi_name = "unknown", - .expect_mi_tlv_hex = "", + .expect_mi_tlv_hex = "17031032f4", /* encoding invalid MI type */ .expect_str = "", }, { .mi_type = GSM_MI_ODD, .mi_str = "1234", .mi_name = "unknown", - .expect_mi_tlv_hex = "", + .expect_mi_tlv_hex = "17031032f4", /* encoding invalid MI type */ .expect_str = "", }, }; @@ -525,14 +522,9 @@ static void test_mid_encode_decode(void) printf(" ERROR: expected '%s'\n", t->expect_mi_tlv_hex); } - if (tlv_len) { - /* skip the GSM48_IE_MOBILE_ID tag and length */ - mi_buf = tlv_buf + 2; - mi_len = tlv_len - 2; - } else { - mi_buf = NULL; - mi_len = 0; - } + /* skip the GSM48_IE_MOBILE_ID tag and length */ + mi_buf = tlv_buf + 2; + mi_len = tlv_len - 2; rc = gsm48_mi_to_string(str, str_size, mi_buf, mi_len); printf(" -> MI-str=%s rc=%d\n", osmo_quote_str(str, -1), rc); @@ -619,368 +611,6 @@ static void test_mid_decode_zero_length(void) printf("\n"); } -struct msgb *msgb_from_hex(const char *label, uint16_t size, const char *hex) -{ - struct msgb *msg = msgb_alloc_headroom(size, 4, label); - OSMO_ASSERT(msg); - msg->l3h = msgb_put(msg, osmo_hexparse(hex, msg->data, msgb_tailroom(msg))); - return msg; -} - -struct mobile_identity_tc { - const char *label; - const char *compl_l3_msg; - int expect_rc; - struct osmo_mobile_identity expect_mi; -}; - -/* Some Complete Layer 3 messages copied from real GSM network traces. */ -struct mobile_identity_tc mobile_identity_tests[] = { - { - .label = "LU with IMSI 901700000004620", - .compl_l3_msg = "050802008168000130" "089910070000006402", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "901700000004620", - }, - }, - { - .label = "LU with TMSI 0x0980ad8a", - .compl_l3_msg = "05084262f224002a50" "05f40980ad8a", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0x0980ad8a, - }, - }, - { - .label = "LU with invalid MI type", - .compl_l3_msg = "050802008168000130" "089d10070000006402", - .expect_rc = -EINVAL, - }, - { - .label = "LU with truncated IMSI MI", - .compl_l3_msg = "050802008168000130" "0899100700000064", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with too short IMSI MI (12345)", - .compl_l3_msg = "050802008168000130" "03193254", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with just long enough IMSI MI 123456", - .compl_l3_msg = "050802008168000130" "04113254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456", - }, - }, - { - .label = "LU with max length IMSI MI 123456789012345", - .compl_l3_msg = "050802008168000130" "081932547698103254", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456789012345", - }, - }, - { - .label = "LU with just too long IMSI MI 1234567890123456", - .compl_l3_msg = "050802008168000130" "091132547698103254f6", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with truncated TMSI MI", - .compl_l3_msg = "05084262f224002a50" "05f40980ad", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with odd length TMSI", - .compl_l3_msg = "05084262f224002a50" "05fc0980ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with too long TMSI MI", - .compl_l3_msg = "05084262f224002a50" "06f40980ad23", - .expect_rc = -EBADMSG, - }, - { - .label = "LU with too short TMSI", - .compl_l3_msg = "05084262f224002a50" "04f480ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Request with IMSI 123456", - .compl_l3_msg = "052401035058a6" "04113254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456", - }, - }, - { - .label = "CM Service Request with TMSI 0x5a42e404", - .compl_l3_msg = "052401035058a6" "05f45a42e404", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0x5a42e404, - }, - }, - { - .label = "CM Service Request with shorter CM2, with IMSI 123456", - .compl_l3_msg = "052401025058" "04113254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456", - }, - }, - { - .label = "CM Service Request with longer CM2, with IMSI 123456", - .compl_l3_msg = "052401055058a62342" "04113254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456", - }, - }, - { - .label = "CM Service Request with shorter CM2, with TMSI 0x00000000", - .compl_l3_msg = "052401025058" "05f400000000", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0, - }, - }, - { - .label = "CM Service Request with invalid MI type", - .compl_l3_msg = "052401035058a6" "089d10070000006402", - .expect_rc = -EINVAL, - }, - { - .label = "CM Service Request with truncated IMSI MI", - .compl_l3_msg = "052401035058a6" "0899100700000064", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Request with truncated TMSI MI", - .compl_l3_msg = "0524010150" "05f40980ad", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Request with odd length TMSI", - .compl_l3_msg = "052401045058a623" "05fc0980ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Request with too long TMSI MI", - .compl_l3_msg = "052401035058a6" "06f40980ad23", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Request with too short TMSI", - .compl_l3_msg = "052401035058a6" "04f480ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "CM Service Reestablish Request with TMSI 0x5a42e404", - .compl_l3_msg = "052801035058a6" "05f45a42e404", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0x5a42e404, - }, - }, - { - .label = "Paging Response with IMSI 1234567", - .compl_l3_msg = "06270003505886" "0419325476", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "1234567", - }, - }, - { - .label = "Paging Response with TMSI 0xb48883de", - .compl_l3_msg = "06270003505886" "05f4b48883de", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0xb48883de, - }, - }, - { - .label = "Paging Response with TMSI, with unused nibble not 0xf", - .compl_l3_msg = "06270003505886" "0504b48883de", - .expect_rc = -EBADMSG, - }, - { - .label = "Paging Response with too short IMEI (1234567)", - .compl_l3_msg = "06270003505886" "041a325476", - .expect_rc = -EBADMSG, - }, - { - .label = "Paging Response with IMEI 123456789012345", - .compl_l3_msg = "06270003505886" "081a32547698103254", - .expect_mi = { - .type = GSM_MI_TYPE_IMEI, - .imei = "123456789012345", - }, - }, - { - .label = "Paging Response with IMEI 12345678901234 (no Luhn checksum)", - .compl_l3_msg = "06270003505886" "0812325476981032f4", - .expect_mi = { - .type = GSM_MI_TYPE_IMEI, - .imei = "12345678901234", - }, - }, - { - .label = "Paging Response with IMEISV 1234567890123456", - .compl_l3_msg = "06270003505886" "091332547698103254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMEISV, - .imeisv = "1234567890123456", - }, - }, - { - .label = "Paging Response with too short IMEISV 123456789012345", - .compl_l3_msg = "06270003505886" "081b32547698103254", - .expect_rc = -EBADMSG, - }, - { - .label = "Paging Response with too long IMEISV 12345678901234567", - .compl_l3_msg = "06270003505886" "091b3254769810325476", - .expect_rc = -EBADMSG, - }, - { - .label = "Paging Response with IMSI 123456789012345 and flipped ODD bit", - .compl_l3_msg = "06270003505886" "081132547698103254", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with IMSI 901700000004620", - .compl_l3_msg = "050130" "089910070000006402", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "901700000004620", - }, - }, - { - .label = "IMSI-Detach with TMSI 0x0980ad8a", - .compl_l3_msg = "050130" "05f40980ad8a", - .expect_mi = { - .type = GSM_MI_TYPE_TMSI, - .tmsi = 0x0980ad8a, - }, - }, - { - .label = "IMSI-Detach with invalid MI type", - .compl_l3_msg = "050130" "089d10070000006402", - .expect_rc = -EINVAL, - }, - { - .label = "IMSI-Detach with truncated IMSI MI", - .compl_l3_msg = "050130" "0899100700000064", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with too short IMSI MI (12345)", - .compl_l3_msg = "050130" "03193254", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with just long enough IMSI MI 123456", - .compl_l3_msg = "050130" "04113254f6", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456", - }, - }, - { - .label = "IMSI-Detach with max length IMSI MI 123456789012345", - .compl_l3_msg = "050130" "081932547698103254", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "123456789012345", - }, - }, - { - .label = "IMSI-Detach with just too long IMSI MI 1234567890123456", - .compl_l3_msg = "050130" "091132547698103254f6", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with truncated TMSI MI", - .compl_l3_msg = "050130" "05f40980ad", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with odd length TMSI", - .compl_l3_msg = "050130" "05fc0980ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with too long TMSI MI", - .compl_l3_msg = "050130" "06f40980ad23", - .expect_rc = -EBADMSG, - }, - { - .label = "IMSI-Detach with too short TMSI", - .compl_l3_msg = "050130" "04f480ad8a", - .expect_rc = -EBADMSG, - }, - { - .label = "Identity Response with IMSI 901700000004620", - .compl_l3_msg = "0519" "089910070000006402", - .expect_mi = { - .type = GSM_MI_TYPE_IMSI, - .imsi = "901700000004620", - }, - }, - { - .label = "Identity Response with IMEI 123456789012345", - .compl_l3_msg = "0519" "081a32547698103254", - .expect_mi = { - .type = GSM_MI_TYPE_IMEI, - .imei = "123456789012345", - }, - }, - { - .label = "Identity Response with IMEISV 9876543210987654", - .compl_l3_msg = "0519" "099378563412907856f4", - .expect_mi = { - .type = GSM_MI_TYPE_IMEISV, - .imeisv = "9876543210987654", - }, - }, -}; - -void test_struct_mobile_identity() -{ - struct mobile_identity_tc *t; - printf("%s()\n", __func__); - for (t = mobile_identity_tests; (t - mobile_identity_tests) < ARRAY_SIZE(mobile_identity_tests); t++) { - struct osmo_mobile_identity mi; - struct msgb *msg; - int rc; - memset(&mi, 0xff, sizeof(mi)); - - msg = msgb_from_hex(t->label, 1024, t->compl_l3_msg); - rc = osmo_mobile_identity_decode_from_l3(&mi, msg, false); - msgb_free(msg); - - printf("%s: rc = %d", t->label, rc); - if (!rc) { - printf(", mi = %s", osmo_mobile_identity_to_str_c(OTC_SELECT, &mi)); - } - - if (rc == t->expect_rc - && ((rc != 0) || !osmo_mobile_identity_cmp(&mi, &t->expect_mi))) { - printf(" ok"); - } else { - printf(" ERROR: Expected rc = %d", t->expect_rc); - if (!t->expect_rc) - printf(", mi = %s", osmo_mobile_identity_to_str_c(OTC_SELECT, &t->expect_mi)); - } - printf("\n"); - } - printf("\n"); -} - static const struct bcd_number_test { /* Human-readable test name */ const char *test_name; @@ -1552,7 +1182,6 @@ int main(int argc, char **argv) test_mid_from_imsi(); test_mid_encode_decode(); test_mid_decode_zero_length(); - test_struct_mobile_identity(); test_bcd_number_encode_decode(); test_ra_cap(); test_lai_encode_decode(); |