<matrixBuild _class='hudson.matrix.MatrixBuild'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.SCMTrigger$SCMTriggerCause'><shortDescription>Started by an SCM change</shortDescription></cause></action><action></action><action _class='hudson.model.ParametersAction'><parameter _class='hudson.model.StringParameterValue'><name>BRANCH</name><value>master</value></parameter><parameter _class='hudson.model.StringParameterValue'><name>EMAIL_NOTIFICATIONS</name><value>jenkins-notifications@lists.osmocom.org laforge@gnumonks.org</value></parameter></action><action _class='jenkins.metrics.impl.TimeInQueueAction'><blockedDurationMillis>0</blockedDurationMillis><blockedTimeMillis>0</blockedTimeMillis><buildableDurationMillis>0</buildableDurationMillis><buildableTimeMillis>0</buildableTimeMillis><buildingDurationMillis>947767</buildingDurationMillis><executingTimeMillis>947767</executingTimeMillis><executorUtilization>1.0</executorUtilization><subTaskCount>0</subTaskCount><waitingDurationMillis>5411</waitingDurationMillis><waitingTimeMillis>5411</waitingTimeMillis></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginpmaierfixgr _class='hudson.plugins.git.util.Build'><buildNumber>2045</buildNumber><marked><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></marked><revision><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><branch><SHA1>e5f56dd35f1b2347a59f88b401b59997798fff67</SHA1><name>refs/remotes/origin/pmaier/fixgr</name></branch></revision></refsremotesoriginpmaierfixgr><refsremotesoriginpmaierrcp _class='hudson.plugins.git.util.Build'><buildNumber>2131</buildNumber><marked><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></marked><revision><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><branch><SHA1>ba01cb7afffa0141e4e9476d566366801773c416</SHA1><name>refs/remotes/origin/pmaier/rcp</name></branch></revision></refsremotesoriginpmaierrcp><originmaster _class='hudson.plugins.git.util.Build'><buildNumber>2141</buildNumber><marked><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><branch><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><name>origin/master</name></branch></marked><revision><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><branch><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><name>origin/master</name></branch></revision></originmaster><refsremotesoriginpmaierara-m _class='hudson.plugins.git.util.Build'><buildNumber>1320</buildNumber><marked><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></marked><revision><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><branch><SHA1>8f289234f74045496c3752bf1bb9397302f3e912</SHA1><name>refs/remotes/origin/pmaier/ara-m</name></branch></revision></refsremotesoriginpmaierara-m><refsremotesoriginpmaierkeepfiles _class='hudson.plugins.git.util.Build'><buildNumber>1353</buildNumber><marked><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></marked><revision><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><branch><SHA1>3d815859830197b9c55e0a49a1bd2532f71285e1</SHA1><name>refs/remotes/origin/pmaier/keepfiles</name></branch></revision></refsremotesoriginpmaierkeepfiles><refsremotesoriginpmaierfixapdu _class='hudson.plugins.git.util.Build'><buildNumber>1421</buildNumber><marked><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></marked><revision><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><branch><SHA1>568e8ae9b817ec2473907bfdd30870410890ffb0</SHA1><name>refs/remotes/origin/pmaier/fixapdu</name></branch></revision></refsremotesoriginpmaierfixapdu><refsremotesoriginpmaieraramtest _class='hudson.plugins.git.util.Build'><buildNumber>1467</buildNumber><marked><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></marked><revision><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><branch><SHA1>6a555ac5ccad9ee2cae5e0ba247990f824f8e9b6</SHA1><name>refs/remotes/origin/pmaier/aramtest</name></branch></revision></refsremotesoriginpmaieraramtest><refsremotesoriginosmithwip _class='hudson.plugins.git.util.Build'><buildNumber>1816</buildNumber><marked><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></marked><revision><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><branch><SHA1>e4ea1c997348370ba1d7415bfd926ac873b58c87</SHA1><name>refs/remotes/origin/osmith/wip</name></branch></revision></refsremotesoriginosmithwip><refsremotesoriginpmaierotatest _class='hudson.plugins.git.util.Build'><buildNumber>2022</buildNumber><marked><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></marked><revision><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><branch><SHA1>f57f047c627392c40fbe349b1a73ccebe05dc005</SHA1><name>refs/remotes/origin/pmaier/otatest</name></branch></revision></refsremotesoriginpmaierotatest><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>402</buildNumber><marked><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><branch><SHA1>4f888a0414101dee4f20aa12579491fcc71707b3</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><branch><SHA1>ef58c94dfeaa489085846ba40ae6ac90903df12e</SHA1><name>origin/master</name></branch></lastBuiltRevision><remoteUrl>https://gerrit.osmocom.org/pysim</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><building>false</building><displayName>#2141</displayName><duration>947767</duration><estimatedDuration>948120</estimatedDuration><fullDisplayName>master-pysim #2141</fullDisplayName><id>2141</id><inProgress>false</inProgress><keepLog>false</keepLog><number>2141</number><queueId>116573</queueId><result>SUCCESS</result><timestamp>1778678406602</timestamp><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/2141/</url><builtOn></builtOn><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/card_key_provider.py</affectedPath><affectedPath>pySim-shell.py</affectedPath><commitId>3cd5c41fb4879d630123240033ff2b852d8a5796</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>card_key_provider: move boiler-plate code into helper functions

in pySim-shell.py we add the commandline options for the card key
provider and do the setup accordingly. Let's put this boilerplate
code into helper functions instead, so that we can re-use it in
other pySim programs as well. Let's use pySim.transport as a
pattern.

Related: SYS#6959
Change-Id: I6d095cbb644e608f4a751a1d0749b1484cdc781d
</comment><date>2026-05-08 17:54:33 +0200</date><id>3cd5c41fb4879d630123240033ff2b852d8a5796</id><msg>card_key_provider: move boiler-plate code into helper functions</msg><path><editType>edit</editType><file>pySim/card_key_provider.py</file></path><path><editType>edit</editType><file>pySim-shell.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>tests/unittests/test_card_key_provider.py</affectedPath><affectedPath>pySim/card_key_provider.py</affectedPath><commitId>58a324126e8227d3d63dd581dcbbd8b878d08f14</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>card_key_provider: pass CardKeyFieldCryptor to constructor

We currently create the CardKeyFieldCryptor object inside the constructor
of the concrete CardKeyProvider classes. There is currently no problem
with that, but when we create the CardKeyFieldCryptor object first and
then pass it as parameter to the constructor, we gain more flexibility
in case we want to support other CardKeyFieldCryptor variants in the
future.

Related: SYS#6959
Change-Id: If43552740aadacab9126f8a002749a9582eef8f4
</comment><date>2026-05-08 17:54:33 +0200</date><id>58a324126e8227d3d63dd581dcbbd8b878d08f14</id><msg>card_key_provider: pass CardKeyFieldCryptor to constructor</msg><path><editType>edit</editType><file>tests/unittests/test_card_key_provider.py</file></path><path><editType>edit</editType><file>pySim/card_key_provider.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/card_key_provider.py</affectedPath><commitId>7d11f917785a88689e67255d786f1191e04b3ff4</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>card_key_provider: add a static method to parse --column-keys args

The contents of the --column-keys arguments are currently parsed
in init_card_key_provider. Let's add a static method in
CardKeyFieldCryptor to simplify re-usage of the CardKeyFieldCryptor

Related: SYS#6959
Change-Id: Ic955f271b1de1b1b855b21c82ed10343044e45fa
</comment><date>2026-05-08 17:54:33 +0200</date><id>7d11f917785a88689e67255d786f1191e04b3ff4</id><msg>card_key_provider: add a static method to parse --column-keys args</msg><path><editType>edit</editType><file>pySim/card_key_provider.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/log.py</affectedPath><commitId>66d3b54f923788aece1063918ed15e12e97b3140</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>pySimLogger: fix default log format string

In format string we prepend when we log in verbose mode. We use %(module)s
as format string quaifier. This qualifier is replaced with the name of the
module from where the logger was called. This is mostly equal to the logger
name (__name__) we pass when we create the logger.

However, this is not the behavior we actually want. We want to log the
logger name that we passed when the logger was created. For this, we must
use %(name)s as qualifier.

Related: SYS#6959
Change-Id: I3951a70ad6ce864a7158b093cba46ae9fc1cb5bd
</comment><date>2026-05-08 17:54:33 +0200</date><id>66d3b54f923788aece1063918ed15e12e97b3140</id><msg>pySimLogger: fix default log format string</msg><path><editType>edit</editType><file>pySim/log.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/app.py</affectedPath><commitId>810c51c38fe0f552eecb032857e81964d84b72cb</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>pySim/app: use pySimLogger instead of print

let's replace the stray print statements with proper logger calls.

Related: SYS#6959
Change-Id: I95b4536cc8853e7ba6a5dd573b903dfb85e56b9a
</comment><date>2026-05-08 17:54:33 +0200</date><id>810c51c38fe0f552eecb032857e81964d84b72cb</id><msg>pySim/app: use pySimLogger instead of print</msg><path><editType>edit</editType><file>pySim/app.py</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>pySim/filesystem.py</affectedPath><commitId>ef58c94dfeaa489085846ba40ae6ac90903df12e</commitId><timestamp>1778255673000</timestamp><author><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></author><authorEmail>pmaier@sysmocom.de</authorEmail><comment>pySim/filesystem: use pySimLogger instead of print

let's replace the stray print statements with proper logger calls.

Related: SYS#6959
Change-Id: I3a7188ad33706df66b2113e15cc7d06004c9bc39
</comment><date>2026-05-08 17:54:33 +0200</date><id>ef58c94dfeaa489085846ba40ae6ac90903df12e</id><msg>pySim/filesystem: use pySimLogger instead of print</msg><path><editType>edit</editType><file>pySim/filesystem.py</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://jenkins.osmocom.org/jenkins/user/pmaier</absoluteUrl><fullName>pmaier@sysmocom.de</fullName></culprit><run><number>2141</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=card-test,a1=default,a3=default,a4=default,label=simtester/2141/</url></run><run><number>2141</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=distcheck,a1=default,a3=default,a4=default,label=osmocom-master/2141/</url></run><run><number>2141</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=docs,a1=default,a3=default,a4=default,label=osmocom-master/2141/</url></run><run><number>2141</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=pylint,a1=default,a3=default,a4=default,label=osmocom-master/2141/</url></run><run><number>2141</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=test,a1=default,a3=default,a4=default,label=osmocom-master/2141/</url></run><run><number>2112</number><url>https://jenkins.osmocom.org/jenkins/view/Sysmocom/job/master-pysim/JOB_TYPE=test,a1=default,a3=default,a4=default,label=simtester/2112/</url></run></matrixBuild>