diff options
author | Neels Hofmeyr <neels@hofmeyr.de> | 2018-12-05 23:24:50 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-12-10 17:06:30 +0000 |
commit | 23187fa108f094b2ed9d497380b63235592477b2 (patch) | |
tree | 594a7c16a36760270a8a2ec73c000ff162291508 | |
parent | 627e0113d142c91eaf9a750ab76b722bb776b1ce (diff) |
gsm48_generate_mid(): mask out ODD flag from mi_type
For MI encoding, see 3GPP TS 24.008, 10.5.1.4 Mobile Identity. The 'odd' flag
indicates whether the last BCD nibble is used. Of course that flag should be
made sure to reflect the actual length.
Change-Id: Id6e695ebf9f86b295eaa7e2c6228989256f37e68
-rw-r--r-- | src/gsm/gsm48.c | 2 | ||||
-rw-r--r-- | tests/gsm0408/gsm0408_test.c | 4 | ||||
-rw-r--r-- | tests/gsm0408/gsm0408_test.ok | 8 |
3 files changed, 6 insertions, 8 deletions
diff --git a/src/gsm/gsm48.c b/src/gsm/gsm48.c index 4558dfb6..0f0889b4 100644 --- a/src/gsm/gsm48.c +++ b/src/gsm/gsm48.c @@ -611,7 +611,7 @@ uint8_t gsm48_generate_mid(uint8_t *buf, const char *id, uint8_t mi_type) uint8_t length = strnlen(id, 255), i, off = 0, odd = (length & 1) == 1; buf[0] = GSM48_IE_MOBILE_ID; - buf[2] = osmo_char2bcd(id[0]) << 4 | mi_type | (odd << 3); + buf[2] = osmo_char2bcd(id[0]) << 4 | (mi_type & GSM_MI_TYPE_MASK) | (odd << 3); /* if the length is even we will fill half of the last octet */ buf[1] = (length + (odd ? 1 : 2)) >> 1; diff --git a/tests/gsm0408/gsm0408_test.c b/tests/gsm0408/gsm0408_test.c index c786d389..9bb320d0 100644 --- a/tests/gsm0408/gsm0408_test.c +++ b/tests/gsm0408/gsm0408_test.c @@ -380,7 +380,7 @@ 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_mi_tlv_hex = "1704493224f3", /* encodes "odd" for even number of digits! */ + .expect_mi_tlv_hex = "1704413224f3", }, { .mi_type = GSM_MI_TYPE_IMSI, @@ -464,7 +464,7 @@ static const struct test_mid_encode_decode_test test_mid_encode_decode_tests[] = { .mi_type = GSM_MI_ODD, .mi_str = "1234", - .expect_mi_tlv_hex = "17031832f4", /* encoding invalid MI type, and "odd" for an even number of digits */ + .expect_mi_tlv_hex = "17031032f4", /* encoding invalid MI type */ .expect_str = "", }, }; diff --git a/tests/gsm0408/gsm0408_test.ok b/tests/gsm0408/gsm0408_test.ok index 2db58de8..6e99f5b3 100644 --- a/tests/gsm0408/gsm0408_test.ok +++ b/tests/gsm0408/gsm0408_test.ok @@ -14,10 +14,8 @@ Testing Mobile Identity conversions -> MI-TLV-hex='1704413224f3' -> MI-str="423423" rc=7 - unknown 0x9 423423 - -> MI-TLV-hex='1704493224f3' - -> MI-str="423423F" rc=8 - ERROR: expected MI-str="423423" - ERROR: expected rc=7 + -> MI-TLV-hex='1704413224f3' + -> MI-str="423423" rc=7 - IMSI 4234235 -> MI-TLV-hex='170449322453' -> MI-str="4234235" rc=8 @@ -58,7 +56,7 @@ Testing Mobile Identity conversions -> MI-TLV-hex='17031032f4' -> MI-str="" rc=1 - unknown 0x8 1234 - -> MI-TLV-hex='17031832f4' + -> MI-TLV-hex='17031032f4' -> MI-str="" rc=1 Decoding zero length Mobile Identities |