<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/19237">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">4G: Add milenage support<br><br>Change-Id: I4c1fb9bfec9927f2bfa29e6b27959323838f59e5<br>---<br>M src/osmo_gsm_tester/core/schema.py<br>M src/osmo_gsm_tester/obj/epc_amarisoft.py<br>M src/osmo_gsm_tester/obj/epc_srs.py<br>M src/osmo_gsm_tester/obj/ms.py<br>M src/osmo_gsm_tester/templates/amarisoft_ltemme.cfg.tmpl<br>M src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl<br>M src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl<br>M src/osmo_gsm_tester/templates/srsue.conf.tmpl<br>M sysmocom/resources.conf.prod<br>9 files changed, 30 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/37/19237/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/core/schema.py b/src/osmo_gsm_tester/core/schema.py</span><br><span>index 9a346cd..72c2738 100644</span><br><span>--- a/src/osmo_gsm_tester/core/schema.py</span><br><span>+++ b/src/osmo_gsm_tester/core/schema.py</span><br><span>@@ -28,6 +28,7 @@</span><br><span> HWADDR_RE = re.compile('([0-9a-fA-F]{2}:){5}[0-9a-fA-F]{2}')</span><br><span> IMSI_RE = re.compile('[0-9]{6,15}')</span><br><span> KI_RE = re.compile('[0-9a-fA-F]{32}')</span><br><span style="color: hsl(120, 100%, 40%);">+OPC_RE = re.compile('[0-9a-fA-F]{32}')</span><br><span> MSISDN_RE = re.compile('[0-9]{1,15}')</span><br><span> </span><br><span> def match_re(name, regex, val):</span><br><span>@@ -60,6 +61,9 @@</span><br><span> def ki(val):</span><br><span>     return match_re('KI', KI_RE, val)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def opc(val):</span><br><span style="color: hsl(120, 100%, 40%);">+    return match_re('OPC', OPC_RE, val)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def msisdn(val):</span><br><span>     return match_re('MSISDN', MSISDN_RE, val)</span><br><span> </span><br><span>@@ -157,6 +161,7 @@</span><br><span> HWADDR = 'hwaddr'</span><br><span> IMSI = 'imsi'</span><br><span> KI = 'ki'</span><br><span style="color: hsl(120, 100%, 40%);">+OPC = 'opc'</span><br><span> MSISDN = 'msisdn'</span><br><span> AUTH_ALGO = 'auth_algo'</span><br><span> TIMES='times'</span><br><span>@@ -180,6 +185,7 @@</span><br><span>         HWADDR: hwaddr,</span><br><span>         IMSI: imsi,</span><br><span>         KI: ki,</span><br><span style="color: hsl(120, 100%, 40%);">+        OPC: opc,</span><br><span>         MSISDN: msisdn,</span><br><span>         AUTH_ALGO: auth_algo,</span><br><span>         TIMES: times,</span><br><span>diff --git a/src/osmo_gsm_tester/obj/epc_amarisoft.py b/src/osmo_gsm_tester/obj/epc_amarisoft.py</span><br><span>index 40216f7..3e91b5c 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/epc_amarisoft.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/epc_amarisoft.py</span><br><span>@@ -177,8 +177,11 @@</span><br><span>         if algo_str != util.OSMO_AUTH_ALGO_NONE and not modem.ki():</span><br><span>             raise log.Error("Auth algo %r selected but no KI specified" % algo_str)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        if algo_str == 'milenage' and not modem.opc():</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error("Auth algo milenage selected but no OPC specified")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         subscriber_id = len(self.subscriber_list) # list index</span><br><span style="color: hsl(0, 100%, 40%);">-        self.subscriber_list.append({'id': subscriber_id, 'imsi': modem.imsi(), 'msisdn': msisdn, 'auth_algo': algo_str, 'ki': modem.ki(), 'opc': None, 'apn_ipaddr': modem.apn_ipaddr()})</span><br><span style="color: hsl(120, 100%, 40%);">+        self.subscriber_list.append({'id': subscriber_id, 'imsi': modem.imsi(), 'msisdn': msisdn, 'auth_algo': algo_str, 'ki': modem.ki(), 'opc': modem.opc(), 'apn_ipaddr': modem.apn_ipaddr()})</span><br><span> </span><br><span>         self.log('Add subscriber', msisdn=msisdn, imsi=modem.imsi(), subscriber_id=subscriber_id,</span><br><span>                  algo_str=algo_str)</span><br><span>diff --git a/src/osmo_gsm_tester/obj/epc_srs.py b/src/osmo_gsm_tester/obj/epc_srs.py</span><br><span>index 9c4b004..ee0ad33 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/epc_srs.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/epc_srs.py</span><br><span>@@ -190,8 +190,14 @@</span><br><span>         if algo_str != util.OSMO_AUTH_ALGO_NONE and not modem.ki():</span><br><span>             raise log.Error("Auth algo %r selected but no KI specified" % algo_str)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        if algo_str == 'milenage':</span><br><span style="color: hsl(120, 100%, 40%);">+            if not modem.opc():</span><br><span style="color: hsl(120, 100%, 40%);">+                raise log.Error("Auth algo milenage selected but no OPC specified")</span><br><span style="color: hsl(120, 100%, 40%);">+            # srsepc's used_db uses token 'mil' for milenage:</span><br><span style="color: hsl(120, 100%, 40%);">+            algo_str = 'mil'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>         subscriber_id = len(self.subscriber_list) # list index</span><br><span style="color: hsl(0, 100%, 40%);">-        self.subscriber_list.append({'id': subscriber_id, 'imsi': modem.imsi(), 'msisdn': msisdn, 'auth_algo': algo_str, 'ki': modem.ki(), 'opc': None, 'apn_ipaddr': modem.apn_ipaddr()})</span><br><span style="color: hsl(120, 100%, 40%);">+        self.subscriber_list.append({'id': subscriber_id, 'imsi': modem.imsi(), 'msisdn': msisdn, 'auth_algo': algo_str, 'ki': modem.ki(), 'opc': modem.opc(), 'apn_ipaddr': modem.apn_ipaddr()})</span><br><span> </span><br><span>         self.log('Add subscriber', msisdn=msisdn, imsi=modem.imsi(), subscriber_id=subscriber_id,</span><br><span>                  algo_str=algo_str)</span><br><span>diff --git a/src/osmo_gsm_tester/obj/ms.py b/src/osmo_gsm_tester/obj/ms.py</span><br><span>index b39d3ee..3e75719 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/ms.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/ms.py</span><br><span>@@ -28,6 +28,7 @@</span><br><span>         'path': schema.STR,</span><br><span>         'imsi': schema.IMSI,</span><br><span>         'ki': schema.KI,</span><br><span style="color: hsl(120, 100%, 40%);">+        'opc': schema.OPC,</span><br><span>         'auth_algo': schema.AUTH_ALGO,</span><br><span>         'apn_ipaddr': schema.IPV4,</span><br><span>         'ciphers[]': schema.CIPHER,</span><br><span>@@ -100,6 +101,9 @@</span><br><span>     def ki(self):</span><br><span>         return self._conf.get('ki')</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def opc(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._conf.get('opc', None)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def apn_ipaddr(self):</span><br><span>         return self._conf.get('apn_ipaddr', 'dynamic')</span><br><span> </span><br><span>diff --git a/src/osmo_gsm_tester/templates/amarisoft_ltemme.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_ltemme.cfg.tmpl</span><br><span>index 5fcc74a..9564e39 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/amarisoft_ltemme.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/amarisoft_ltemme.cfg.tmpl</span><br><span>@@ -154,10 +154,11 @@</span><br><span>       amf: 0x9001, /* Authentication Management Field */</span><br><span>       sqn: "000000000000", /* Sequence Number */</span><br><span>       K: "${sub.ki}", /* Anritsu Test USIM */</span><br><span style="color: hsl(120, 100%, 40%);">+      opc: "${sub.opc}",</span><br><span>       /* if true, allow several UEs to have the same IMSI (useful</span><br><span>          with test SIM cards). They are distinguished with their</span><br><span>          IMEI. default = false. */</span><br><span style="color: hsl(0, 100%, 40%);">-      multi_sim: true,</span><br><span style="color: hsl(120, 100%, 40%);">+      multi_sim: false,</span><br><span>     },</span><br><span> %endfor</span><br><span>     /* Add new entries for each IMSI/K */</span><br><span>diff --git a/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl b/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl</span><br><span>index 720c0ba..263c191 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/amarisoft_lteue.cfg.tmpl</span><br><span>@@ -48,8 +48,10 @@</span><br><span>       ue_category: 4,</span><br><span> </span><br><span>       /* USIM data */</span><br><span style="color: hsl(120, 100%, 40%);">+      sim_algo: "${sub.auth_algo}", /* USIM authentication algorithm: xor, milenage or tuak */</span><br><span>       imsi: "${ue.imsi}",</span><br><span>       K: "${ue.ki}",</span><br><span style="color: hsl(120, 100%, 40%);">+      opc: "${ue.opc}",</span><br><span> </span><br><span>       /* If enabled, will try to use external SIM card using libpcsclite */</span><br><span>       //external_sim: true,</span><br><span>diff --git a/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl b/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl</span><br><span>index 5b970bf..250b261 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/srsepc_user_db.csv.tmpl</span><br><span>@@ -20,5 +20,5 @@</span><br><span> #ue2,mil,001010123456780,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,7,dynamic</span><br><span> #ue1,xor,001010123456789,00112233445566778899aabbccddeeff,opc,63bfa50ee6523365ff14c1f45f88737d,9001,000000001255,7,dynamic</span><br><span> %for sub in epc.hss.subscribers:</span><br><span style="color: hsl(0, 100%, 40%);">-ogt${sub.id},${sub.auth_algo},${sub.imsi},${sub.ki},opc,63bfa50ee6523365ff14c1f45f88737d,8000,000000001234,${sub.qci},${sub.apn_ipaddr}</span><br><span style="color: hsl(120, 100%, 40%);">+ogt${sub.id},${sub.auth_algo},${sub.imsi},${sub.ki},opc,${sub.opc},8000,000000001234,${sub.qci},${sub.apn_ipaddr}</span><br><span> %endfor</span><br><span>diff --git a/src/osmo_gsm_tester/templates/srsue.conf.tmpl b/src/osmo_gsm_tester/templates/srsue.conf.tmpl</span><br><span>index a75be23..6d97589 100644</span><br><span>--- a/src/osmo_gsm_tester/templates/srsue.conf.tmpl</span><br><span>+++ b/src/osmo_gsm_tester/templates/srsue.conf.tmpl</span><br><span>@@ -126,7 +126,7 @@</span><br><span> [usim]</span><br><span> mode = soft</span><br><span> algo = ${ue.auth_algo}</span><br><span style="color: hsl(0, 100%, 40%);">-#opc  = 63BFA50EE6523365FF14C1F45F88737D</span><br><span style="color: hsl(120, 100%, 40%);">+opc  = ${ue.opc}</span><br><span> k    = ${ue.ki}</span><br><span> imsi = ${ue.imsi}</span><br><span> imei = 353490069873319</span><br><span>diff --git a/sysmocom/resources.conf.prod b/sysmocom/resources.conf.prod</span><br><span>index e6429a0..dc60734 100644</span><br><span>--- a/sysmocom/resources.conf.prod</span><br><span>+++ b/sysmocom/resources.conf.prod</span><br><span>@@ -260,7 +260,8 @@</span><br><span>   rf_dev_args: auto</span><br><span>   imsi: '001010123456789'</span><br><span>   ki: '00112233445566778899aabbccddeeff'</span><br><span style="color: hsl(0, 100%, 40%);">-  auth_algo: 'xor'</span><br><span style="color: hsl(120, 100%, 40%);">+  opc: '63BFA50EE6523365FF14C1F45F88737D'</span><br><span style="color: hsl(120, 100%, 40%);">+  auth_algo: 'milenage'</span><br><span>   features: ['4g']</span><br><span>   run_node:</span><br><span>     run_type: ssh</span><br><span>@@ -274,6 +275,7 @@</span><br><span>   rf_dev_args: driver=lime,serial=00090706024F0A22,rxant=LNAW,txant=BAND1</span><br><span>   imsi: '001010123456789'</span><br><span>   ki: '00112233445566778899aabbccddeeff'</span><br><span style="color: hsl(120, 100%, 40%);">+  opc: '63BFA50EE6523365FF14C1F45F88737D'</span><br><span>   auth_algo: 'xor'</span><br><span>   features: ['4g']</span><br><span>   run_node:</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/19237">change 19237</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/19237"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I4c1fb9bfec9927f2bfa29e6b27959323838f59e5 </div>
<div style="display:none"> Gerrit-Change-Number: 19237 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>