mirror of https://gerrit.osmocom.org/pysim
Treat MCC and MNC as strings, not integers
A MNC of 02 and 002 are *not* equal. The former is a two-digit MNC and the latter is a three-digit MNC. Hence, we shouldn't treat MNCs as integer values as we have no clue how many leading zeroes (if any) the user entered. Change-Id: I9d1d07a64888c76703c3e430bbdd822080c05819 Closes: OS#4523
This commit is contained in:
parent
ff84c23839
commit
7f1d3c496f
|
@ -98,13 +98,13 @@ def parse_options():
|
||||||
help="Country code [default: %default]",
|
help="Country code [default: %default]",
|
||||||
default=1,
|
default=1,
|
||||||
)
|
)
|
||||||
parser.add_option("-x", "--mcc", dest="mcc", type="int",
|
parser.add_option("-x", "--mcc", dest="mcc", type="string",
|
||||||
help="Mobile Country Code [default: %default]",
|
help="Mobile Country Code [default: %default]",
|
||||||
default=901,
|
default="901",
|
||||||
)
|
)
|
||||||
parser.add_option("-y", "--mnc", dest="mnc", type="int",
|
parser.add_option("-y", "--mnc", dest="mnc", type="string",
|
||||||
help="Mobile Network Code [default: %default]",
|
help="Mobile Network Code [default: %default]",
|
||||||
default=55,
|
default="55",
|
||||||
)
|
)
|
||||||
parser.add_option("--mnclen", dest="mnclen", type="choice",
|
parser.add_option("--mnclen", dest="mnclen", type="choice",
|
||||||
help="Length of Mobile Network Code [default: %default]",
|
help="Length of Mobile Network Code [default: %default]",
|
||||||
|
@ -219,7 +219,7 @@ def _digits(secret, usage, len, num):
|
||||||
return d[0:len]
|
return d[0:len]
|
||||||
|
|
||||||
def _mcc_mnc_digits(mcc, mnc):
|
def _mcc_mnc_digits(mcc, mnc):
|
||||||
return ('%03d%03d' if mnc > 100 else '%03d%02d') % (mcc, mnc)
|
return '%s%s' % (mcc, mnc)
|
||||||
|
|
||||||
def _cc_digits(cc):
|
def _cc_digits(cc):
|
||||||
return ('%03d' if cc > 100 else '%02d') % cc
|
return ('%03d' if cc > 100 else '%02d') % cc
|
||||||
|
@ -272,8 +272,17 @@ def gen_parameters(opts):
|
||||||
mcc = opts.mcc
|
mcc = opts.mcc
|
||||||
mnc = opts.mnc
|
mnc = opts.mnc
|
||||||
|
|
||||||
if not ((0 < mcc < 999) and (0 < mnc < 999)):
|
if not mcc.isdigit() or not mnc.isdigit():
|
||||||
raise ValueError('mcc & mnc must be between 0 and 999')
|
raise ValueError('mcc & mnc must only contain decimal digits')
|
||||||
|
if len(mcc) < 1 or len(mcc) > 3:
|
||||||
|
raise ValueError('mcc must be between 1 .. 3 digits')
|
||||||
|
if len(mnc) < 1 or len(mnc) > 3:
|
||||||
|
raise ValueError('mnc must be between 1 .. 3 digits')
|
||||||
|
|
||||||
|
# MCC always has 3 digits
|
||||||
|
mcc = lpad(mcc, 3, "0")
|
||||||
|
# MNC must be at least 2 digits
|
||||||
|
mnc = lpad(mnc, 2, "0")
|
||||||
|
|
||||||
# Digitize country code (2 or 3 digits)
|
# Digitize country code (2 or 3 digits)
|
||||||
cc_digits = _cc_digits(opts.country)
|
cc_digits = _cc_digits(opts.country)
|
||||||
|
|
|
@ -102,7 +102,9 @@ def enc_iccid(iccid):
|
||||||
|
|
||||||
def enc_plmn(mcc, mnc):
|
def enc_plmn(mcc, mnc):
|
||||||
"""Converts integer MCC/MNC into 3 bytes for EF"""
|
"""Converts integer MCC/MNC into 3 bytes for EF"""
|
||||||
return swap_nibbles(lpad('%d' % int(mcc), 3) + lpad('%d' % int(mnc), 3))
|
if len(mnc) == 2:
|
||||||
|
mnc = "F%s" % mnc
|
||||||
|
return swap_nibbles("%s%s" % (mcc, mnc))
|
||||||
|
|
||||||
def dec_spn(ef):
|
def dec_spn(ef):
|
||||||
byte1 = int(ef[0:2])
|
byte1 = int(ef[0:2])
|
||||||
|
|
|
@ -31,7 +31,7 @@ OPLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
HPLMNAcT:
|
HPLMNAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
|
@ -9,9 +9,9 @@ SMSP: e1ffffffffffffffffffffffff0581005155f5ffffffffffff000000ffffffffffffffffff
|
||||||
SPN: wavemobile
|
SPN: wavemobile
|
||||||
Display HPLMN: False
|
Display HPLMN: False
|
||||||
Display OPLMN: False
|
Display OPLMN: False
|
||||||
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
PLMNsel: 00f110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
PLMNwAcT:
|
PLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
@ -29,7 +29,7 @@ PLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
OPLMNwAcT:
|
OPLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
|
@ -10,7 +10,7 @@ SMSP: ffffffffffffffffffffffffe1ffffffffffffffffffffffff0581005155f5ffffffffffff
|
||||||
SPN: Magic
|
SPN: Magic
|
||||||
Display HPLMN: True
|
Display HPLMN: True
|
||||||
Display OPLMN: False
|
Display OPLMN: False
|
||||||
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
PLMNsel: 00f110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
PLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
PLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
OPLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
OPLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
|
|
|
@ -9,9 +9,9 @@ SMSP: ffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffff
|
||||||
SPN: Not available
|
SPN: Not available
|
||||||
Display HPLMN: False
|
Display HPLMN: False
|
||||||
Display OPLMN: False
|
Display OPLMN: False
|
||||||
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
PLMNsel: 00f110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
PLMNwAcT:
|
PLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
@ -25,7 +25,7 @@ PLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
OPLMNwAcT:
|
OPLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
@ -39,7 +39,7 @@ OPLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
HPLMNAcT:
|
HPLMNAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
|
@ -9,9 +9,9 @@ SMSP: ffffffffffffffffffffffffffffffffffffffffffffffffe1ffffffffffffffffffffffff
|
||||||
SPN: Magic
|
SPN: Magic
|
||||||
Display HPLMN: True
|
Display HPLMN: True
|
||||||
Display OPLMN: True
|
Display OPLMN: True
|
||||||
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
PLMNsel: 00f110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
PLMNwAcT:
|
PLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
@ -25,7 +25,7 @@ PLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
OPLMNwAcT:
|
OPLMNwAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
@ -39,7 +39,7 @@ OPLMNwAcT:
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
||||||
HPLMNAcT:
|
HPLMNAcT:
|
||||||
fff11fffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
00f110ffff # MCC: 001 MNC: 001 AcT: UTRAN, E-UTRAN, GSM, GSM COMPACT, cdma2000 HRPD, cdma2000 1xRTT
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
ffffff0000 # unused
|
ffffff0000 # unused
|
||||||
|
|
|
@ -10,7 +10,7 @@ SMSP: ffffffffffffffffffffffffe1ffffffffffffffffffffffff0581005155f5ffffffffffff
|
||||||
SPN: Not available
|
SPN: Not available
|
||||||
Display HPLMN: False
|
Display HPLMN: False
|
||||||
Display OPLMN: False
|
Display OPLMN: False
|
||||||
PLMNsel: fff11fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
PLMNsel: 00f110ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
|
||||||
PLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
PLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
OPLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
OPLMNwAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
HPLMNAcT: Can't read file -- SW match failed! Expected 9000 and got 9404.
|
||||||
|
|
Loading…
Reference in New Issue