summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeels Hofmeyr <neels@hofmeyr.de>2018-12-05 23:24:50 +0100
committerHarald Welte <laforge@gnumonks.org>2018-12-10 17:06:30 +0000
commit23187fa108f094b2ed9d497380b63235592477b2 (patch)
tree594a7c16a36760270a8a2ec73c000ff162291508
parent627e0113d142c91eaf9a750ab76b722bb776b1ce (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.c2
-rw-r--r--tests/gsm0408/gsm0408_test.c4
-rw-r--r--tests/gsm0408/gsm0408_test.ok8
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