blob: 3bd5879e5581be794641c0d80b51505219a43f86 [file] [log] [blame]
Neels Hofmeyr25dd7852017-09-25 16:37:34 +02001== Managing Subscribers
2
3Subscribers are kept in a local SQLite database file and can be managed via VTY
4and CTRL interfaces.
5
Neels Hofmeyr0c331ab2018-07-02 15:12:33 +02006This section provides some examples; also refer to the OsmoHLR VTY reference
Neels Hofmeyr25dd7852017-09-25 16:37:34 +02007manual <<vty-ref-osmohlr>> as well as the Control interface described in
8<<hlr-ctrl>>.
9
10=== Example: Add/Update/Delete Subscriber via VTY
11
Neels Hofmeyr0c331ab2018-07-02 15:12:33 +020012The following telnet VTY session adds a subscriber complete with GSM (2G) and
13UMTS (3G and 2G) authentication tokens, and finally removes the subscriber
14again; it assumes that osmo-hlr is running and listening for telnet VTY
15connections on localhost:
Neels Hofmeyr25dd7852017-09-25 16:37:34 +020016
17----
18$ telnet localhost 4258
19include::../example_subscriber_add_update_delete.vty[]
20----
21
22[[subscriber-params]]
23=== Subscriber Parameters
24
25The following parameters are managed for each subscriber of the HLR, modelled
26roughly after 3GPP TS 23.008, version 13.3.0; note that not all of these
Neels Hofmeyr0c331ab2018-07-02 15:12:33 +020027parameters are necessarily in active use.
28
29The `aud3g` table also applies to 2G networks: it provides UMTS AKA tokens for
30Milenage authentication, which is available both on 3G and 2G networks. On 2G,
31when both MS and network are R99 capable (like OsmoMSC and OsmoSGSN are), the
32full UMTS AKA with Milenage keys from `aud_3g`, using AUTN and extended RES
33tokens, is available. With pre-R99 MS or network configurations, the GSM AKA
34compatible variant of Milenage, still using the Milenage keys from `aud_3g` but
35transceiving only RAND and SRES, may be applicable. (See 3GPP TS 33.102, chapter
366.8.1, Authentication and key agreement of UMTS subscribers.)
Neels Hofmeyr25dd7852017-09-25 16:37:34 +020037
38.OsmoHLR's subscriber parameters
39[options="header",width="100%",cols="20%,20%,60%"]
40|===
41|Name|Example|Description
42|imsi|901700000014701|identity of the SIM/USIM, 3GPP TS 23.008 chapter 2.1.1.1
43|msisdn|2342123|number to dial to reach this subscriber (multiple MSISDNs can be stored per subscriber), 3GPP TS 23.008 chapter 2.1.2
44|imeisv|4234234234234275|identity of the mobile device and software version, 3GPP TS 23.008 chapter 2.2.3
Neels Hofmeyr0c331ab2018-07-02 15:12:33 +020045|aud2g.algo|comp128v3|Authentication algorithm ID for GSM AKA, corresponds to enum osmo_auth_algo
Neels Hofmeyr25dd7852017-09-25 16:37:34 +020046|aud2g.ki||Subscriber's secret key (128bit)
Neels Hofmeyr0c331ab2018-07-02 15:12:33 +020047|aud3g.algo|milenage|Authentication algorithm ID for UMTS AKA (applies to both 3G and 2G networks), corresponds to enum osmo_auth_algo
Neels Hofmeyr25dd7852017-09-25 16:37:34 +020048|aud3g.k|(32 hexadecimal digits)|Subscriber's secret key (128bit)
49|aud3g.op|(32 hexadecimal digits)|Operator's secret key (128bit)
50|aud3g.opc|(32 hexadecimal digits)|Secret key derived from OP and K (128bit), alternative to using OP which does not disclose OP to subscribers
51|aud3g.sqn|123|Sequence number of last used key (64bit unsigned)
52|aud3g.ind_bitlen|5|Nr of index bits at lower SQN end
53|apn||
54|vlr_number||3GPP TS 23.008 chapter 2.4.5
Neels Hofmeyra8045da2019-10-31 01:19:44 +010055|msc_number||3GPP TS 23.008 chapter 2.4.6
Neels Hofmeyr25dd7852017-09-25 16:37:34 +020056|sgsn_number||3GPP TS 23.008 chapter 2.4.8.1
57|sgsn_address||3GPP TS 23.008 chapter 2.13.10
58|ggsn_number||3GPP TS 23.008 chapter 2.4.8.2
59|gmlc_number||3GPP TS 23.008 chapter 2.4.9.2
60|smsc_number||3GPP TS 23.008 chapter 2.4.23
61|periodic_lu_tmr||3GPP TS 23.008 chapter 2.4.24
62|periodic_rau_tau_tmr||3GPP TS 23.008 chapter 2.13.115
63|nam_cs|1|Enable/disable voice access (3GPP TS 23.008 chapter 2.1.1.2: network access mode)
64|nam_ps|0|Enable/disable data access (3GPP TS 23.008 chapter 2.1.1.2: network access mode)
65|lmsi||3GPP TS 23.008 chapter 2.1.8
66|ms_purged_cs|0|3GPP TS 23.008 chapter 2.7.5
67|ms_purged_ps|1|3GPP TS 23.008 chapter 2.7.6
68|===
69
Oliver Smithc4157232019-03-06 20:23:01 +010070=== Configuring the Subscribers Create on Demand Feature
71
72Usually a HLR will only allow mobile equipment (ME) on the network, if the HLR
73has a subscriber entry with the ME's IMSI. But OsmoHLR can also be configured to
74automatically create new entries for new IMSIs, with the
Oliver Smithb64cb272019-07-15 09:17:08 +020075`subscriber-create-on-demand` VTY option. The obvious use case is creating the
Oliver Smithc4157232019-03-06 20:23:01 +010076new subscriber entry and then allowing the ME to use both the CS
77(Circuit Switched) and PS (Packet Switched) NAM (Network Access Mode).
78
Oliver Smithb64cb272019-07-15 09:17:08 +020079.osmo-hlr.cfg
80----
81hlr
82 subscriber-create-on-demand 5 cs+ps
83----
84
Oliver Smithc4157232019-03-06 20:23:01 +010085On the other hand, operators might only want to give network access to IMSIs, of
86which they know the owner. In order to do that, one can set the default NAM to
Oliver Smithb64cb272019-07-15 09:17:08 +020087`none` and manually approve new subscribers by changing the NAM (e.g. over the
88VTY, see the example below).
Oliver Smithc4157232019-03-06 20:23:01 +010089
90Oftentimes it is hard to know, which IMSI belongs to which ME, but the IMEI is
91readily available. If you configure your MSC to send IMEI checking requests to
92the HLR, before sending location update requests, the subscribers created on
93demand can also have the IMEI stored in the HLR database. With OsmoMSC, this
Oliver Smithb64cb272019-07-15 09:17:08 +020094is done by writing `check-imei-rqd early` in the `msc` section of osmo-msc.cfg.
Oliver Smithc4157232019-03-06 20:23:01 +010095Then enable storing the IMEI when receiving check IMEI requests with
Oliver Smithb64cb272019-07-15 09:17:08 +020096`store-imei` in the OsmoHLR configuration.
97
98.osmo-msc.cfg
99----
100msc
101 check-imei-rqd early
102----
103
104.osmo-hlr.cfg
105----
106hlr
107 subscriber-create-on-demand 5 none
108 store-imei
109----
110
111.Example: Enabling CS and PS NAM via VTY for a known IMEI
112----
113OsmoHLR> enable
114OsmoHLR# subscriber imei 35761300444848 show
115 ID: 1
116 IMSI: 123456789023000
117 MSISDN: 58192 <1>
118 IMEI: 35761300444848
119 CS disabled <2>
120 PS disabled <2>
121OsmoHLR# subscriber imei 35761300444848 update network-access-mode cs+ps
122OsmoHLR# subscriber imei 35761300444848 show
123 ID: 1
124 IMSI: 123456789023000
125 MSISDN: 58192
126 IMEI: 35761300444848
127----
128<1> Randomly generated 5 digit MSISDN
129<2> Disabled CS and PS NAM prevent the subscriber from accessing the network
Neels Hofmeyr80cb6c92020-06-29 17:10:03 +0200130
131
132=== Import Subscriber Data
133
134==== Scripted Import
135
136WARNING: It is not generally a good idea to depend on the HLR database's internal table structure, but in the lack of an
137automated import procedure, this example is provided as an ad-hoc method to aid automated subscriber import. This is not
138guaranteed to remain valid.
139
140NOTE: We may add CSV and other import methods to the `osmo-hlr-db-tool`, but so far that is not implemented. Contact the
141community if you are interested in such a feature being implemented.
142
143NOTE: `sqlite3` is available from your distribution packages or `sqlite.org`.
144
145Currently, probably the easiest way to automatically import subscribers to OsmoHLR is to write out a text file with SQL
146commands per subscriber, and feed that to `sqlite3`, as described below.
147
148A difficulty is to always choose subscriber IDs that are not yet in use. For an initial import, the subscriber ID may be
149incremented per subscriber record. If adding more subscribers to an existing database, it is necessary to choose
150subscriber IDs that are not yet in use. Get the highest ID in use with:
151
152----
153sqlite3 hlr.db 'select max(id) from subscriber'
154----
155
156A full SQL example of adding a single subscriber with id 23, IMSI 001010123456789, MSISDN 1234, Ki for COMP128v1, and K
157and OPC for Milenage:
158
159----
160INSERT subscriber (id, imsi, msisdn) VALUES (23, '001010123456789', '1234');
161
162INSERT INTO auc_2g (subscriber_id, algo_id_2g, ki)
163VALUES(23, 1, '0123456789abcdef0123456789abcdef');
164
165INSERT INTO auc_3g (subscriber_id, algo_id_3g, k, op, opc)
166VALUES(23, 5, '0123456789abcdef0123456789abcdef',NULL,'0123456789abcdef0123456789abcdef');
167----
168
169Table entries to `auc_2g` and/or `auc_3g` may be omitted if no such key material is required.
170
171UMTS Milenage auth (on both 2G and 3G RAN) is configured by the `auc_3g` table. `algo_id_3g` must currently always be 5
172(MILENAGE).
173
174The algorithm IDs for `algo_id_2g` and `algo_id_3g` are:
175
176.Algorithm IDs in OsmoHLR's database
177[options="header",width="50%",cols="40%,60%"]
178|===
179|`algo_id_2g` / `algo_id_3g` | Authentication Algorithm
180| 1 | COMP128v1
181| 2 | COMP128v2
182| 3 | COMP128v3
183| 4 | XOR
184| 5 | MILENAGE
185|===
186
187Create an empty HLR database with
188
189----
190osmo-hlr-db-tool -l hlr.db create
191----
192
193Repeat above SQL commands per subscriber, incrementing the subscriber ID for each block, then feed the SQL commands for
194the subscribers to be imported to the `sqlite3` command line tool:
195
196----
197sqlite3 hlr.db < subscribers.sql
198----
199
200[[db_import_nitb]]
201==== Import OsmoNITB database
202
203To upgrade from old OsmoNITB to OsmoHLR, use `osmo-hlr-db-tool`:
204
205----
206osmo-hlr-db-tool -l hlr.db import-nitb-db nitb.db
207----
208
209Be aware that the import is lossy, only the IMSI, MSISDN, nam_cs/ps and 2G auth data are set.