laforge has submitted this change. ( https://gerrit.osmocom.org/c/pysim/+/32712 
)

Change subject: Add FPLMN read and program
......................................................................

Add FPLMN read and program

Change-Id: I9ce8c1af691c28ea9ed69e7b5f03f0c02d1f029b
---
M pySim-prog.py
M pySim-read.py
M pySim/cards.py
M pysim-testdata/Fairwaves-SIM.ok
M pysim-testdata/Wavemobile-SIM.ok
M pysim-testdata/sysmoISIM-SJA2.ok
M pysim-testdata/sysmoUSIM-SJS1.ok
7 files changed, 69 insertions(+), 0 deletions(-)

Approvals:
  laforge: Looks good to me, approved
  dexter: Looks good to me, but someone else must approve
  pespin: Looks good to me, but someone else must approve
  Jenkins Builder: Verified




diff --git a/pySim-prog.py b/pySim-prog.py
index 448f2a0..7c644b7 100755
--- a/pySim-prog.py
+++ b/pySim-prog.py
@@ -150,6 +150,9 @@
                       default=None,
                       choices=['{:02X}'.format(int(m)) for m in EF_AD.OP_MODE],
                       )
+    parser.add_option("-f", "--fplmn", dest="fplmn", action="append",
+                      help="Set Forbidden PLMN. Add multiple time for multiple 
FPLMNS",
+                      )
     parser.add_option("--epdgid", dest="epdgid",
                       help="Set Home Evolved Packet Data Gateway (ePDG) 
Identifier. (Only FQDN format supported)",
                       )
@@ -498,6 +501,7 @@
         'impi': opts.impi,
         'impu': opts.impu,
         'opmode': opts.opmode,
+        'fplmn': opts.fplmn,
     }

 
diff --git a/pySim-read.py b/pySim-read.py
index b7fe1f2..ddc193a 100755
--- a/pySim-read.py
+++ b/pySim-read.py
@@ -253,6 +253,14 @@
             else:
                 print("EHPLMN: Can't read, response code = %s" % (sw,))

+        # EF.FPLMN
+        if usim_card.file_exists(EF_USIM_ADF_map['FPLMN']):
+            res, sw = usim_card.read_fplmn()
+            if sw == '9000':
+                print(f'FPLMN:\n{res}')
+            else:
+                print(f'FPLMN: Can\'t read, response code = {sw}')
+
         # EF.UST
         try:
             if usim_card.file_exists(EF_USIM_ADF_map['UST']):
diff --git a/pySim/cards.py b/pySim/cards.py
index 0f34f9b..d3a43f3 100644
--- a/pySim/cards.py
+++ b/pySim/cards.py
@@ -381,6 +381,22 @@
         data, sw = self._scc.update_binary(EF_USIM_ADF_map['EHPLMN'], ehplmn)
         return sw

+    def read_fplmn(self):
+        res, sw = self._scc.read_binary(EF_USIM_ADF_map['FPLMN'])
+        if sw == '9000':
+            return format_xplmn(res), sw
+        else:
+            return None, sw
+
+    def update_fplmn(self, fplmn):
+        self._scc.select_file('3f00')
+        self.select_adf_by_aid('USIM')
+        size = self._scc.binary_size(EF_USIM_ADF_map['FPLMN'])
+        encoded = ''.join([enc_plmn(plmn[:3], plmn[3:]) for plmn in fplmn])
+        encoded = rpad(encoded, size)
+        data, sw = self._scc.update_binary(EF_USIM_ADF_map['FPLMN'], encoded)
+        return sw
+
     def read_epdgid(self):
         (res, sw) = self._scc.read_binary(EF_USIM_ADF_map['ePDGId'])
         if sw == '9000':
@@ -1702,6 +1718,7 @@
             'smsp': self.update_smsp,
             'ki': self.update_ki,
             'opc': self.update_opc,
+            'fplmn': self.update_fplmn,
         }

     @classmethod
@@ -1715,6 +1732,7 @@
         return None

     def program(self, p):
+        self.set_apdu_parameter('00', '0004')
         # Authenticate
         self._scc.verify_chv(0xc, h2b('3834373936313533'))
         for handler in self._program_handlers:
diff --git a/pysim-testdata/Fairwaves-SIM.ok b/pysim-testdata/Fairwaves-SIM.ok
index f07c033..063fc6b 100644
--- a/pysim-testdata/Fairwaves-SIM.ok
+++ b/pysim-testdata/Fairwaves-SIM.ok
@@ -88,6 +88,18 @@
        Service 58 - Extension 8
        Service 59 - MMS User Connectivity Parameters

+FPLMN:
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+
 USIM Service Table: 01ea1ffc21360480010000
        Service 1 - Local Phone Book
        Service 10 - Short Message Storage (SMS)
diff --git a/pysim-testdata/Wavemobile-SIM.ok b/pysim-testdata/Wavemobile-SIM.ok
index d8f1a6f..980332f 100644
--- a/pysim-testdata/Wavemobile-SIM.ok
+++ b/pysim-testdata/Wavemobile-SIM.ok
@@ -93,6 +93,12 @@
        Service 58 - Extension 8
        Service 59 - MMS User Connectivity Parameters

+FPLMN:
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+
 USIM Service Table: 9eff1b3c37fe5900000000
        Service 2 - Fixed Dialling Numbers (FDN)
        Service 3 - Extension 2
diff --git a/pysim-testdata/sysmoISIM-SJA2.ok b/pysim-testdata/sysmoISIM-SJA2.ok
index a8c98d9..f9476df 100644
--- a/pysim-testdata/sysmoISIM-SJA2.ok
+++ b/pysim-testdata/sysmoISIM-SJA2.ok
@@ -108,6 +108,12 @@
        ffffff # unused
        ffffff # unused

+FPLMN:
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+       ffffff # unused
+
 USIM Service Table: beff9f9de73e0408400170330000002e00000000
        Service 2 - Fixed Dialling Numbers (FDN)
        Service 3 - Extension 2
diff --git a/pysim-testdata/sysmoUSIM-SJS1.ok b/pysim-testdata/sysmoUSIM-SJS1.ok
index 14d7110..b4277f4 100644
--- a/pysim-testdata/sysmoUSIM-SJS1.ok
+++ b/pysim-testdata/sysmoUSIM-SJS1.ok
@@ -104,6 +104,12 @@
        Service 58 - Extension 8
        Service 59 - MMS User Connectivity Parameters

+FPLMN:
+       62f201 # MCC: 262 MNC: 010
+       62f202 # MCC: 262 MNC: 020
+       62f203 # MCC: 262 MNC: 030
+       62f207 # MCC: 262 MNC: 070
+
 USIM Service Table: 9e6b1dfc67f6580000
        Service 2 - Fixed Dialling Numbers (FDN)
        Service 3 - Extension 2

--
To view, visit https://gerrit.osmocom.org/c/pysim/+/32712
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: pysim
Gerrit-Branch: master
Gerrit-Change-Id: I9ce8c1af691c28ea9ed69e7b5f03f0c02d1f029b
Gerrit-Change-Number: 32712
Gerrit-PatchSet: 7
Gerrit-Owner: matanp <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: dexter <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: pespin <[email protected]>
Gerrit-CC: lynxis lazus <[email protected]>
Gerrit-MessageType: merged

Reply via email to