From b3466ad104c2fe0000e9aba43da500de979767b9 Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Mon, 28 Aug 2017 14:21:15 +0200 Subject: Add cipher cfg param for modem and bts This parameter is contains a list of supported encryption ciphers by the modem or bts setting it. It is so far not directly/automatically used inside osmo-gsm-tester code, but can be useful to create scenarios for tests that require specific ciphering modes. For instance, aoip_encryption suite contains tests that require a BTS and a modem that supports a5 0 and a5 1, otherwise tests will fail. Change-Id: Ic0e368843a6e58bd3eeef36d2c0a7501296f0f3e --- example/default-suites.conf | 2 +- example/resources.conf | 7 +++++++ example/scenarios/cipher-a50.conf | 7 +++++++ example/scenarios/cipher-a51.conf | 7 +++++++ src/osmo_gsm_tester/resource.py | 2 ++ src/osmo_gsm_tester/schema.py | 7 +++++++ 6 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 example/scenarios/cipher-a50.conf create mode 100644 example/scenarios/cipher-a51.conf diff --git a/example/default-suites.conf b/example/default-suites.conf index 0198486..1e8d47a 100644 --- a/example/default-suites.conf +++ b/example/default-suites.conf @@ -6,4 +6,4 @@ - aoip_sms:trx-sysmocell5000 - smpp - aoip_smpp -- aoip_encryption +- aoip_encryption:cipher-a50+cipher-a51 diff --git a/example/resources.conf b/example/resources.conf index f190c2f..95cb8cf 100644 --- a/example/resources.conf +++ b/example/resources.conf @@ -13,6 +13,7 @@ bts: ipa_unit_id: 1 addr: 10.42.42.114 band: GSM-1800 + ciphers: [a5_0, a5_1, a5_3] - label: Ettus B200 type: osmo-bts-trx @@ -20,6 +21,7 @@ bts: addr: 10.42.42.50 band: GSM-1800 launch_trx: true + ciphers: [a5_0, a5_1] - label: sysmoCell 5000 type: osmo-bts-trx @@ -27,6 +29,7 @@ bts: addr: 10.42.42.51 band: GSM-1800 trx_remote_ip: 10.42.42.112 + ciphers: [a5_0, a5_1] arfcn: - arfcn: 512 @@ -56,21 +59,25 @@ modem: imsi: '901700000009031' ki: '80A37E6FDEA931EAC92FFA5F671EFEAD' auth_algo: 'xor' + ciphers: [a5_0, a5_1] - label: sierra_2 path: '/sierra_2' imsi: '901700000009029' ki: '00969E283349D354A8239E877F2E0866' auth_algo: 'xor' + ciphers: [a5_0, a5_1] - label: gobi_0 path: '/gobi_0' imsi: '901700000009030' ki: 'BB70807226393CDBAC8DD3439FF54252' auth_algo: 'xor' + ciphers: [a5_0, a5_1] - label: gobi_3 path: '/gobi_3' imsi: '901700000009032' ki: '2F70DCA43C45ACB97E947FDD0C7CA30A' auth_algo: 'xor' + ciphers: [a5_0, a5_1] diff --git a/example/scenarios/cipher-a50.conf b/example/scenarios/cipher-a50.conf new file mode 100644 index 0000000..107172b --- /dev/null +++ b/example/scenarios/cipher-a50.conf @@ -0,0 +1,7 @@ +resources: + bts: + - ciphers: + - a5_0 + modem: + - ciphers: + - a5_0 diff --git a/example/scenarios/cipher-a51.conf b/example/scenarios/cipher-a51.conf new file mode 100644 index 0000000..8539867 --- /dev/null +++ b/example/scenarios/cipher-a51.conf @@ -0,0 +1,7 @@ +resources: + bts: + - ciphers: + - a5_1 + modem: + - ciphers: + - a5_1 diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py index 1fcfea1..a70b366 100644 --- a/src/osmo_gsm_tester/resource.py +++ b/src/osmo_gsm_tester/resource.py @@ -56,6 +56,7 @@ RESOURCES_SCHEMA = { 'bts[].band': schema.BAND, 'bts[].trx_remote_ip': schema.IPV4, 'bts[].launch_trx': schema.BOOL_STR, + 'bts[].ciphers[]': schema.CIPHER, 'bts[].trx_list[].hw_addr': schema.HWADDR, 'bts[].trx_list[].net_device': schema.STR, 'bts[].trx_list[].nominal_power': schema.INT, @@ -67,6 +68,7 @@ RESOURCES_SCHEMA = { 'modem[].imsi': schema.IMSI, 'modem[].ki': schema.KI, 'modem[].auth_algo': schema.AUTH_ALGO, + 'modem[].ciphers[]': schema.CIPHER, } WANT_SCHEMA = util.dict_add( diff --git a/src/osmo_gsm_tester/schema.py b/src/osmo_gsm_tester/schema.py index dcdfdb1..9a0906c 100644 --- a/src/osmo_gsm_tester/schema.py +++ b/src/osmo_gsm_tester/schema.py @@ -76,6 +76,11 @@ def times(val): if n < 1: raise ValueError('Positive value >0 expected instead of %d' % n) +def cipher(val): + if val in ('a5_0', 'a5_1', 'a5_2', 'a5_3', 'a5_4', 'a5_5', 'a5_6', 'a5_7'): + return + raise ValueError('Unknown Cipher value: %r' % val) + INT = 'int' STR = 'str' UINT = 'uint' @@ -88,6 +93,7 @@ KI = 'ki' MSISDN = 'msisdn' AUTH_ALGO = 'auth_algo' TIMES='times' +CIPHER = 'cipher' SCHEMA_TYPES = { INT: int, STR: str, @@ -101,6 +107,7 @@ SCHEMA_TYPES = { MSISDN: msisdn, AUTH_ALGO: auth_algo, TIMES: times, + CIPHER: cipher, } def validate(config, schema): -- cgit v1.2.3