pySim-prog: convert from optparse to argparse

We already use argparse everywhere else, and we have moved reader-driver
argument parsing into the library expecting argparse.

Change-Id: I7407496643247c754d002656688e9fdcbcf644a8
This commit is contained in:
Harald Welte
2024-03-14 16:22:23 +01:00
committed by laforge
parent 7b524fa079
commit 3aa0b41f39

View File

@@ -25,7 +25,7 @@
# #
import hashlib import hashlib
from optparse import OptionParser import argparse
import os import os
import random import random
import re import re
@@ -35,7 +35,7 @@ import json
import csv import csv
from pySim.commands import SimCardCommands from pySim.commands import SimCardCommands
from pySim.transport import init_reader from pySim.transport import init_reader, argparse_add_reader_args
from pySim.legacy.cards import _cards_classes, card_detect from pySim.legacy.cards import _cards_classes, card_detect
from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid from pySim.utils import h2b, swap_nibbles, rpad, derive_milenage_opc, calculate_luhn, dec_iccid
from pySim.ts_51_011 import EF_AD from pySim.ts_51_011 import EF_AD
@@ -46,169 +46,146 @@ from pySim.utils import *
def parse_options(): def parse_options():
parser = OptionParser(usage="usage: %prog [options]") parser = argparse.ArgumentParser()
argparse_add_reader_args(parser)
parser.add_option("-d", "--device", dest="device", metavar="DEV", parser.add_argument("-t", "--type", dest="type",
help="Serial Device for SIM access [default: %default]", help="Card type (user -t list to view) [default: %(default)s]",
default="/dev/ttyUSB0",
)
parser.add_option("-b", "--baud", dest="baudrate", type="int", metavar="BAUD",
help="Baudrate used for SIM access [default: %default]",
default=9600,
)
parser.add_option("-p", "--pcsc-device", dest="pcsc_dev", type='int', metavar="PCSC",
help="Which PC/SC reader number for SIM access",
default=None,
)
parser.add_option("--modem-device", dest="modem_dev", metavar="DEV",
help="Serial port of modem for Generic SIM Access (3GPP TS 27.007)",
default=None,
)
parser.add_option("--modem-baud", dest="modem_baud", type="int", metavar="BAUD",
help="Baudrate used for modem's port [default: %default]",
default=115200,
)
parser.add_option("--osmocon", dest="osmocon_sock", metavar="PATH",
help="Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)",
default=None,
)
parser.add_option("-t", "--type", dest="type",
help="Card type (user -t list to view) [default: %default]",
default="auto", default="auto",
) )
parser.add_option("-T", "--probe", dest="probe", parser.add_argument("-T", "--probe", dest="probe",
help="Determine card type", help="Determine card type",
default=False, action="store_true" default=False, action="store_true"
) )
parser.add_option("-a", "--pin-adm", dest="pin_adm", parser.add_argument("-a", "--pin-adm", dest="pin_adm",
help="ADM PIN used for provisioning (overwrites default)", help="ADM PIN used for provisioning (overwrites default)",
) )
parser.add_option("-A", "--pin-adm-hex", dest="pin_adm_hex", parser.add_argument("-A", "--pin-adm-hex", dest="pin_adm_hex",
help="ADM PIN used for provisioning, as hex string (16 characters long", help="ADM PIN used for provisioning, as hex string (16 characters long",
) )
parser.add_option("-e", "--erase", dest="erase", action='store_true', parser.add_argument("-e", "--erase", dest="erase", action='store_true',
help="Erase beforehand [default: %default]", help="Erase beforehand [default: %(default)s]",
default=False, default=False,
) )
parser.add_option("-S", "--source", dest="source", parser.add_argument("-S", "--source", dest="source",
help="Data Source[default: %default]", help="Data Source[default: %(default)s]",
default="cmdline", default="cmdline",
) )
# if mode is "cmdline" # if mode is "cmdline"
parser.add_option("-n", "--name", dest="name", parser.add_argument("-n", "--name", dest="name",
help="Operator name [default: %default]", help="Operator name [default: %(default)s]",
default="Magic", default="Magic",
) )
parser.add_option("-c", "--country", dest="country", type="int", metavar="CC", parser.add_argument("-c", "--country", dest="country", type=int, metavar="CC",
help="Country code [default: %default]", help="Country code [default: %(default)s]",
default=1, default=1,
) )
parser.add_option("-x", "--mcc", dest="mcc", type="string", parser.add_argument("-x", "--mcc", dest="mcc",
help="Mobile Country Code [default: %default]", help="Mobile Country Code [default: %(default)s]",
default="901", default="901",
) )
parser.add_option("-y", "--mnc", dest="mnc", type="string", parser.add_argument("-y", "--mnc", dest="mnc",
help="Mobile Network Code [default: %default]", help="Mobile Network Code [default: %(default)s]",
default="55", default="55",
) )
parser.add_option("--mnclen", dest="mnclen", type="choice", parser.add_argument("--mnclen", dest="mnclen",
help="Length of Mobile Network Code [default: %default]", help="Length of Mobile Network Code [default: %(default)s]",
default="auto", default="auto",
choices=["2", "3", "auto"], choices=["2", "3", "auto"],
) )
parser.add_option("-m", "--smsc", dest="smsc", parser.add_argument("-m", "--smsc", dest="smsc",
help="SMSC number (Start with + for international no.) [default: '00 + country code + 5555']", help="SMSC number (Start with + for international no.) [default: '00 + country code + 5555']",
) )
parser.add_option("-M", "--smsp", dest="smsp", parser.add_argument("-M", "--smsp", dest="smsp",
help="Raw SMSP content in hex [default: auto from SMSC]", help="Raw SMSP content in hex [default: auto from SMSC]",
) )
parser.add_option("-s", "--iccid", dest="iccid", metavar="ID", parser.add_argument("-s", "--iccid", dest="iccid", metavar="ID",
help="Integrated Circuit Card ID", help="Integrated Circuit Card ID",
) )
parser.add_option("-i", "--imsi", dest="imsi", parser.add_argument("-i", "--imsi", dest="imsi",
help="International Mobile Subscriber Identity", help="International Mobile Subscriber Identity",
) )
parser.add_option("--msisdn", dest="msisdn", parser.add_argument("--msisdn", dest="msisdn",
help="Mobile Subscriber Integrated Services Digital Number", help="Mobile Subscriber Integrated Services Digital Number",
) )
parser.add_option("-k", "--ki", dest="ki", parser.add_argument("-k", "--ki", dest="ki",
help="Ki (default is to randomize)", help="Ki (default is to randomize)",
) )
parser.add_option("-o", "--opc", dest="opc", parser.add_argument("-o", "--opc", dest="opc",
help="OPC (default is to randomize)", help="OPC (default is to randomize)",
) )
parser.add_option("--op", dest="op", parser.add_argument("--op", dest="op",
help="Set OP to derive OPC from OP and KI", help="Set OP to derive OPC from OP and KI",
) )
parser.add_option("--acc", dest="acc", parser.add_argument("--acc", dest="acc",
help="Set ACC bits (Access Control Code). not all card types are supported", help="Set ACC bits (Access Control Code). not all card types are supported",
) )
parser.add_option("--opmode", dest="opmode", type="choice", parser.add_argument("--opmode", dest="opmode",
help="Set UE Operation Mode in EF.AD (Administrative Data)", help="Set UE Operation Mode in EF.AD (Administrative Data)",
default=None, default=None,
choices=['{:02X}'.format(int(m)) for m in EF_AD.OP_MODE], choices=['{:02X}'.format(int(m)) for m in EF_AD.OP_MODE],
) )
parser.add_option("-f", "--fplmn", dest="fplmn", action="append", parser.add_argument("-f", "--fplmn", dest="fplmn", action="append",
help="Set Forbidden PLMN. Add multiple time for multiple FPLMNS", help="Set Forbidden PLMN. Add multiple time for multiple FPLMNS",
) )
parser.add_option("--epdgid", dest="epdgid", parser.add_argument("--epdgid", dest="epdgid",
help="Set Home Evolved Packet Data Gateway (ePDG) Identifier. (Only FQDN format supported)", help="Set Home Evolved Packet Data Gateway (ePDG) Identifier. (Only FQDN format supported)",
) )
parser.add_option("--epdgSelection", dest="epdgSelection", parser.add_argument("--epdgSelection", dest="epdgSelection",
help="Set PLMN for ePDG Selection Information. (Only Operator Identifier FQDN format supported)", help="Set PLMN for ePDG Selection Information. (Only Operator Identifier FQDN format supported)",
) )
parser.add_option("--pcscf", dest="pcscf", parser.add_argument("--pcscf", dest="pcscf",
help="Set Proxy Call Session Control Function (P-CSCF) Address. (Only FQDN format supported)", help="Set Proxy Call Session Control Function (P-CSCF) Address. (Only FQDN format supported)",
) )
parser.add_option("--ims-hdomain", dest="ims_hdomain", parser.add_argument("--ims-hdomain", dest="ims_hdomain",
help="Set IMS Home Network Domain Name in FQDN format", help="Set IMS Home Network Domain Name in FQDN format",
) )
parser.add_option("--impi", dest="impi", parser.add_argument("--impi", dest="impi",
help="Set IMS private user identity", help="Set IMS private user identity",
) )
parser.add_option("--impu", dest="impu", parser.add_argument("--impu", dest="impu",
help="Set IMS public user identity", help="Set IMS public user identity",
) )
parser.add_option("--read-imsi", dest="read_imsi", action="store_true", parser.add_argument("--read-imsi", dest="read_imsi", action="store_true",
help="Read the IMSI from the CARD", default=False help="Read the IMSI from the CARD", default=False
) )
parser.add_option("--read-iccid", dest="read_iccid", action="store_true", parser.add_argument("--read-iccid", dest="read_iccid", action="store_true",
help="Read the ICCID from the CARD", default=False help="Read the ICCID from the CARD", default=False
) )
parser.add_option("-z", "--secret", dest="secret", metavar="STR", parser.add_argument("-z", "--secret", dest="secret", metavar="STR",
help="Secret used for ICCID/IMSI autogen", help="Secret used for ICCID/IMSI autogen",
) )
parser.add_option("-j", "--num", dest="num", type=int, parser.add_argument("-j", "--num", dest="num", type=int,
help="Card # used for ICCID/IMSI autogen", help="Card # used for ICCID/IMSI autogen",
) )
parser.add_option("--batch", dest="batch_mode", parser.add_argument("--batch", dest="batch_mode",
help="Enable batch mode [default: %default]", help="Enable batch mode [default: %(default)s]",
default=False, action='store_true', default=False, action='store_true',
) )
parser.add_option("--batch-state", dest="batch_state", metavar="FILE", parser.add_argument("--batch-state", dest="batch_state", metavar="FILE",
help="Optional batch state file", help="Optional batch state file",
) )
# if mode is "csv" # if mode is "csv"
parser.add_option("--read-csv", dest="read_csv", metavar="FILE", parser.add_argument("--read-csv", dest="read_csv", metavar="FILE",
help="Read parameters from CSV file rather than command line") help="Read parameters from CSV file rather than command line")
parser.add_option("--write-csv", dest="write_csv", metavar="FILE", parser.add_argument("--write-csv", dest="write_csv", metavar="FILE",
help="Append generated parameters in CSV file", help="Append generated parameters in CSV file",
) )
parser.add_option("--write-hlr", dest="write_hlr", metavar="FILE", parser.add_argument("--write-hlr", dest="write_hlr", metavar="FILE",
help="Append generated parameters to OpenBSC HLR sqlite3", help="Append generated parameters to OpenBSC HLR sqlite3",
) )
parser.add_option("--dry-run", dest="dry_run", parser.add_argument("--dry-run", dest="dry_run",
help="Perform a 'dry run', don't actually program the card", help="Perform a 'dry run', don't actually program the card",
default=False, action="store_true") default=False, action="store_true")
parser.add_option("--card_handler", dest="card_handler_config", metavar="FILE", parser.add_argument("--card_handler", dest="card_handler_config", metavar="FILE",
help="Use automatic card handling machine") help="Use automatic card handling machine")
(options, args) = parser.parse_args() options = parser.parse_args()
if options.type == 'list': if options.type == 'list':
for kls in _cards_classes: for kls in _cards_classes:
@@ -242,9 +219,6 @@ def parse_options():
parser.error( parser.error(
"Can't give ICCID/IMSI for batch mode, need to use automatic parameters ! see --num and --secret for more information") "Can't give ICCID/IMSI for batch mode, need to use automatic parameters ! see --num and --secret for more information")
if args:
parser.error("Extraneous arguments")
return options return options