2017-10-06 00:59:54 +00:00
|
|
|
OsmoHLR> enable
|
|
|
|
|
|
|
|
OsmoHLR# list
|
|
|
|
...
|
|
|
|
subscriber (imsi|msisdn|id) IDENT show
|
2018-12-02 17:52:49 +00:00
|
|
|
show subscriber (imsi|msisdn|id) IDENT
|
2017-10-06 00:59:54 +00:00
|
|
|
subscriber imsi IDENT create
|
|
|
|
subscriber (imsi|msisdn|id) IDENT delete
|
2018-12-02 18:46:46 +00:00
|
|
|
subscriber (imsi|msisdn|id) IDENT update msisdn (none|MSISDN)
|
2017-10-06 00:59:54 +00:00
|
|
|
subscriber (imsi|msisdn|id) IDENT update aud2g none
|
|
|
|
subscriber (imsi|msisdn|id) IDENT update aud2g (comp128v1|comp128v2|comp128v3|xor) ki KI
|
|
|
|
subscriber (imsi|msisdn|id) IDENT update aud3g none
|
|
|
|
subscriber (imsi|msisdn|id) IDENT update aud3g milenage k K (op|opc) OP_C [ind-bitlen] [<0-28>]
|
|
|
|
|
|
|
|
OsmoHLR# subscriber?
|
|
|
|
subscriber Subscriber management commands
|
|
|
|
|
|
|
|
OsmoHLR# subscriber ?
|
|
|
|
imsi Identify subscriber by IMSI
|
|
|
|
msisdn Identify subscriber by MSISDN (phone number)
|
|
|
|
id Identify subscriber by database ID
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi ?
|
|
|
|
IDENT IMSI/MSISDN/ID of the subscriber
|
|
|
|
OsmoHLR# subscriber msisdn ?
|
|
|
|
IDENT IMSI/MSISDN/ID of the subscriber
|
|
|
|
OsmoHLR# subscriber id ?
|
|
|
|
IDENT IMSI/MSISDN/ID of the subscriber
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
% No subscriber for imsi = '123456789023000'
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
% No subscriber for id = '1'
|
|
|
|
OsmoHLR# subscriber msisdn 12345 show
|
|
|
|
% No subscriber for msisdn = '12345'
|
|
|
|
|
2018-12-02 17:52:49 +00:00
|
|
|
OsmoHLR# show subscriber imsi 123456789023000
|
|
|
|
% No subscriber for imsi = '123456789023000'
|
|
|
|
OsmoHLR# show subscriber id 1
|
|
|
|
% No subscriber for id = '1'
|
|
|
|
OsmoHLR# show subscriber msisdn 12345
|
|
|
|
% No subscriber for msisdn = '12345'
|
|
|
|
|
2017-10-06 00:59:54 +00:00
|
|
|
OsmoHLR# subscriber imsi 1234567890230001 create
|
|
|
|
% Not a valid IMSI: 1234567890230001
|
|
|
|
OsmoHLR# subscriber imsi 12345678902300x create
|
|
|
|
% Not a valid IMSI: 12345678902300x
|
|
|
|
OsmoHLR# subscriber imsi 12345 create
|
|
|
|
% Not a valid IMSI: 12345
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 create
|
|
|
|
% Created subscriber 123456789023000
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: none
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: none
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: none
|
|
|
|
OsmoHLR# subscriber msisdn 12345 show
|
|
|
|
% No subscriber for msisdn = '12345'
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update msisdn 12345
|
|
|
|
% Updated subscriber IMSI='123456789023000' to MSISDN='12345'
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 12345
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 12345
|
|
|
|
OsmoHLR# subscriber msisdn 12345 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 12345
|
|
|
|
|
|
|
|
OsmoHLR# subscriber msisdn 12345 update msisdn 423
|
|
|
|
% Updated subscriber IMSI='123456789023000' to MSISDN='423'
|
|
|
|
OsmoHLR# subscriber msisdn 12345 show
|
|
|
|
% No subscriber for msisdn = '12345'
|
|
|
|
|
2018-12-02 18:46:46 +00:00
|
|
|
OsmoHLR# subscriber msisdn 423 update msisdn none
|
|
|
|
% Updated subscriber IMSI='123456789023000': removed MSISDN
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
% No subscriber for msisdn = '423'
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: none
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update msisdn 423
|
|
|
|
% Updated subscriber IMSI='123456789023000' to MSISDN='423'
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
|
2017-10-06 00:59:54 +00:00
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update ?
|
|
|
|
msisdn Set MSISDN (phone number) of the subscriber
|
|
|
|
aud2g Set 2G authentication data
|
|
|
|
aud3g Set UMTS authentication data (3G, and 2G with UMTS AKA)
|
|
|
|
|
2018-12-02 18:46:46 +00:00
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update msisdn ?
|
|
|
|
none Remove MSISDN (phone number)
|
|
|
|
MSISDN New MSISDN (phone number)
|
|
|
|
|
2017-10-06 00:59:54 +00:00
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g ?
|
|
|
|
none Delete 2G authentication data
|
|
|
|
comp128v1 Use COMP128v1 algorithm
|
|
|
|
comp128v2 Use COMP128v2 algorithm
|
|
|
|
comp128v3 Use COMP128v3 algorithm
|
|
|
|
xor Use XOR algorithm
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g comp128v1 ?
|
|
|
|
ki Set Ki Encryption Key
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g comp128v1 ki ?
|
|
|
|
KI Ki as 32 hexadecimal characters
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g comp128v1 ki val ?
|
|
|
|
<cr>
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g xor ki Deaf0ff1ceD0d0DabbedD1ced1ceF00d
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: XOR
|
|
|
|
KI=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud2g comp128v1 ki BeefedCafeFaceAcedAddedDecadeFee
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v1
|
|
|
|
KI=beefedcafefaceacedaddeddecadefee
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v1
|
|
|
|
KI=beefedcafefaceacedaddeddecadefee
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v1
|
|
|
|
KI=beefedcafefaceacedaddeddecadefee
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g comp128v2 ki CededEffacedAceFacedBadFadedBeef
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v2
|
|
|
|
KI=cededeffacedacefacedbadfadedbeef
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v2
|
|
|
|
KI=cededeffacedacefacedbadfadedbeef
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v2
|
|
|
|
KI=cededeffacedacefacedbadfadedbeef
|
|
|
|
|
|
|
|
OsmoHLR# subscriber msisdn 423 update aud2g comp128v3 ki C01ffedC1cadaeAc1d1f1edAcac1aB0a
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g nonsense ki BeefedCafeFaceAcedAddedDecadeFee
|
|
|
|
% Unknown command.
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g milenage ki BeefedCafeFaceAcedAddedDecadeFee
|
|
|
|
% Unknown command.
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g xor ki CoiffedCicadaeAcidifiedAcaciaBoa
|
|
|
|
% Invalid value for KI: 'CoiffedCicadaeAcidifiedAcaciaBoa'
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g xor ki C01ffedC1cadaeAc1d1f1edAcac1aB0aX
|
|
|
|
% Invalid value for KI: 'C01ffedC1cadaeAc1d1f1edAcac1aB0aX'
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v3
|
|
|
|
KI=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g none
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g ?
|
|
|
|
none Delete 3G authentication data
|
|
|
|
milenage Use Milenage algorithm
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage ?
|
|
|
|
k Set Encryption Key K
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k ?
|
|
|
|
K K as 32 hexadecimal characters
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d ?
|
|
|
|
op Set OP key
|
|
|
|
opc Set OPC key
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc ?
|
|
|
|
OP_C OP or OPC as 32 hexadecimal characters
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc CededEffacedAceFacedBadFadedBeef ?
|
|
|
|
[ind-bitlen] Set IND bit length
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc CededEffacedAceFacedBadFadedBeef ind-bitlen ?
|
|
|
|
[<0-28>] IND bit length value (default: 5)
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc CededEffacedAceFacedBadFadedBeef
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
OPC=cededeffacedacefacedbadfadedbeef
|
|
|
|
IND-bitlen=5
|
|
|
|
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d op DeafBeddedBabeAcceededFadedDecaf
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
OP=deafbeddedbabeacceededfadeddecaf
|
|
|
|
IND-bitlen=5
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g none
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc CededEffacedAceFacedBadFadedBeef ind-bitlen 23
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
OPC=cededeffacedacefacedbadfadedbeef
|
|
|
|
IND-bitlen=23
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k CoiffedCicadaeAcidifiedAcaciaBoa opc CededEffacedAceFacedBadFadedBeef
|
|
|
|
% Invalid value for K: 'CoiffedCicadaeAcidifiedAcaciaBoa'
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
OPC=cededeffacedacefacedbadfadedbeef
|
|
|
|
IND-bitlen=23
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d opc CoiffedCicadaeAcidifiedAcaciaBoa
|
|
|
|
% Invalid value for OPC: 'CoiffedCicadaeAcidifiedAcaciaBoa'
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
|
|
|
OPC=cededeffacedacefacedbadfadedbeef
|
|
|
|
IND-bitlen=23
|
|
|
|
|
ctrl: completely replace all CTRL commands
The previous commands are not conforming to how the CTRL interface is intended
to work:
SET enable-ps <IMSI>
SET disable-ps <IMSI>
SET status-ps <IMSI>
'status-ps' is a write-only command even though it returns the status.
'enable-ps' / 'disable-ps' indicate the value instead of a variable name of an
entity. The entity <IMSI> takes the place of the variable value.
See also https://lists.osmocom.org/pipermail/openbsc/2017-September/011236.html
Instead, replace with
SET subscriber.by-imsi-123456.ps-enabled {0,1}
GET subscriber.by-imsi-123456.ps-enabled
and also provide further CTRL functions while at it:
{SET,GET} subscriber.by-{imsi,msisdn,id}-123456.{cs,ps}-enabled {0,1}
GET subscriber.by-{imsi,msisdn,id}-123456.{info,info-aud,info-all}
Provide CTRL tests in the form of transcripts.
Adjust tests/test_subscriber.sql to feature nonzero SQN, to see some values for
SQN in the CTRL transcript tests. (This does not affect the VTY tests, because
that creates its own subscribers, and there's no VTY command to set the SQN.)
This is the first time an application uses CTRL_NODE ids that are defined
outside of libosmocore, see 'Depends' below.
Implementation choice: the first idea was to have a '.' between the 'by-xxx'
and the value, like:
subscriber.by-xxx.123456.function
but the difficulty with subscribers is that they are not in RAM, and I can't
just point node_data at a struct instance that is always there (like, say, a
global bts[0] struct in osmo-bsc). Instead, I want to store the selector and
later decide whether to read from the DB or whatever. With a '.' separating
things, the only way in a ctrl function to obtain both 'by-xxx' and '123456'
for picking a subscriber record would be to parse the entire variable path
string elements, including 'subscriber' and 'function', which would then also
clumsily fix at which node level we hook these commands; there could have been
separate CTRL_NODE_SUBSCR_BY_{IMSI,MSISDN,ID} parent nodes, but we cannot
introspect the current parent node dynamically within a ctrl function handler
(plus I'm not sure whether it's possible and a good idea to have the same
command under multiple parent nodes).
Rather than that, I store the 'by-foo-123' token in the node_data pointer to
have both bits of information pointed at by a single pointer; I use the
incoming command parsing to get this token pre-separated from surrounding node
names, and no need to re-allocate it, since the vector of tokens lives until
after command execution is complete. Each leaf command obtains this token from
cmd->node (aka node_data), and feeds this token to a common static function to
parse selector and value from it and to retrieve a subscriber record as needed.
(BTW, I have mentioned on the mailing list that this way might be necessary to
avoid numeric-only CTRL node names, but we don't need to, and that is not at
all related to this choice of structure.)
Depends: libosmocore I1bd62ae0d4eefde7e1517db15a2155640a1bab58
libosmocore Ic9dba0e4a1eb5a7dc3cee2f181b9024ed4fc7005
Change-Id: I98ee6a06b3aa6a67adb868e0b63b0e04eb42eb50
2017-10-16 23:58:24 +00:00
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d op C01ffedC1cadaeAc1d1f1edAcac1aB0a
|
2017-10-06 00:59:54 +00:00
|
|
|
OsmoHLR# subscriber imsi 123456789023000 update aud3g milenage k Deaf0ff1ceD0d0DabbedD1ced1ceF00d op CoiffedCicadaeAcidifiedAcaciaBoa
|
|
|
|
% Invalid value for OP: 'CoiffedCicadaeAcidifiedAcaciaBoa'
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
ctrl: completely replace all CTRL commands
The previous commands are not conforming to how the CTRL interface is intended
to work:
SET enable-ps <IMSI>
SET disable-ps <IMSI>
SET status-ps <IMSI>
'status-ps' is a write-only command even though it returns the status.
'enable-ps' / 'disable-ps' indicate the value instead of a variable name of an
entity. The entity <IMSI> takes the place of the variable value.
See also https://lists.osmocom.org/pipermail/openbsc/2017-September/011236.html
Instead, replace with
SET subscriber.by-imsi-123456.ps-enabled {0,1}
GET subscriber.by-imsi-123456.ps-enabled
and also provide further CTRL functions while at it:
{SET,GET} subscriber.by-{imsi,msisdn,id}-123456.{cs,ps}-enabled {0,1}
GET subscriber.by-{imsi,msisdn,id}-123456.{info,info-aud,info-all}
Provide CTRL tests in the form of transcripts.
Adjust tests/test_subscriber.sql to feature nonzero SQN, to see some values for
SQN in the CTRL transcript tests. (This does not affect the VTY tests, because
that creates its own subscribers, and there's no VTY command to set the SQN.)
This is the first time an application uses CTRL_NODE ids that are defined
outside of libosmocore, see 'Depends' below.
Implementation choice: the first idea was to have a '.' between the 'by-xxx'
and the value, like:
subscriber.by-xxx.123456.function
but the difficulty with subscribers is that they are not in RAM, and I can't
just point node_data at a struct instance that is always there (like, say, a
global bts[0] struct in osmo-bsc). Instead, I want to store the selector and
later decide whether to read from the DB or whatever. With a '.' separating
things, the only way in a ctrl function to obtain both 'by-xxx' and '123456'
for picking a subscriber record would be to parse the entire variable path
string elements, including 'subscriber' and 'function', which would then also
clumsily fix at which node level we hook these commands; there could have been
separate CTRL_NODE_SUBSCR_BY_{IMSI,MSISDN,ID} parent nodes, but we cannot
introspect the current parent node dynamically within a ctrl function handler
(plus I'm not sure whether it's possible and a good idea to have the same
command under multiple parent nodes).
Rather than that, I store the 'by-foo-123' token in the node_data pointer to
have both bits of information pointed at by a single pointer; I use the
incoming command parsing to get this token pre-separated from surrounding node
names, and no need to re-allocate it, since the vector of tokens lives until
after command execution is complete. Each leaf command obtains this token from
cmd->node (aka node_data), and feeds this token to a common static function to
parse selector and value from it and to retrieve a subscriber record as needed.
(BTW, I have mentioned on the mailing list that this way might be necessary to
avoid numeric-only CTRL node names, but we don't need to, and that is not at
all related to this choice of structure.)
Depends: libosmocore I1bd62ae0d4eefde7e1517db15a2155640a1bab58
libosmocore Ic9dba0e4a1eb5a7dc3cee2f181b9024ed4fc7005
Change-Id: I98ee6a06b3aa6a67adb868e0b63b0e04eb42eb50
2017-10-16 23:58:24 +00:00
|
|
|
OP=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
IND-bitlen=5
|
2017-10-06 00:59:54 +00:00
|
|
|
|
|
|
|
OsmoHLR# subscriber id 1 update aud2g comp128v2 ki CededEffacedAceFacedBadFadedBeef
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: 423
|
|
|
|
2G auth: COMP128v2
|
|
|
|
KI=cededeffacedacefacedbadfadedbeef
|
|
|
|
3G auth: MILENAGE
|
|
|
|
K=deaf0ff1ced0d0dabbedd1ced1cef00d
|
ctrl: completely replace all CTRL commands
The previous commands are not conforming to how the CTRL interface is intended
to work:
SET enable-ps <IMSI>
SET disable-ps <IMSI>
SET status-ps <IMSI>
'status-ps' is a write-only command even though it returns the status.
'enable-ps' / 'disable-ps' indicate the value instead of a variable name of an
entity. The entity <IMSI> takes the place of the variable value.
See also https://lists.osmocom.org/pipermail/openbsc/2017-September/011236.html
Instead, replace with
SET subscriber.by-imsi-123456.ps-enabled {0,1}
GET subscriber.by-imsi-123456.ps-enabled
and also provide further CTRL functions while at it:
{SET,GET} subscriber.by-{imsi,msisdn,id}-123456.{cs,ps}-enabled {0,1}
GET subscriber.by-{imsi,msisdn,id}-123456.{info,info-aud,info-all}
Provide CTRL tests in the form of transcripts.
Adjust tests/test_subscriber.sql to feature nonzero SQN, to see some values for
SQN in the CTRL transcript tests. (This does not affect the VTY tests, because
that creates its own subscribers, and there's no VTY command to set the SQN.)
This is the first time an application uses CTRL_NODE ids that are defined
outside of libosmocore, see 'Depends' below.
Implementation choice: the first idea was to have a '.' between the 'by-xxx'
and the value, like:
subscriber.by-xxx.123456.function
but the difficulty with subscribers is that they are not in RAM, and I can't
just point node_data at a struct instance that is always there (like, say, a
global bts[0] struct in osmo-bsc). Instead, I want to store the selector and
later decide whether to read from the DB or whatever. With a '.' separating
things, the only way in a ctrl function to obtain both 'by-xxx' and '123456'
for picking a subscriber record would be to parse the entire variable path
string elements, including 'subscriber' and 'function', which would then also
clumsily fix at which node level we hook these commands; there could have been
separate CTRL_NODE_SUBSCR_BY_{IMSI,MSISDN,ID} parent nodes, but we cannot
introspect the current parent node dynamically within a ctrl function handler
(plus I'm not sure whether it's possible and a good idea to have the same
command under multiple parent nodes).
Rather than that, I store the 'by-foo-123' token in the node_data pointer to
have both bits of information pointed at by a single pointer; I use the
incoming command parsing to get this token pre-separated from surrounding node
names, and no need to re-allocate it, since the vector of tokens lives until
after command execution is complete. Each leaf command obtains this token from
cmd->node (aka node_data), and feeds this token to a common static function to
parse selector and value from it and to retrieve a subscriber record as needed.
(BTW, I have mentioned on the mailing list that this way might be necessary to
avoid numeric-only CTRL node names, but we don't need to, and that is not at
all related to this choice of structure.)
Depends: libosmocore I1bd62ae0d4eefde7e1517db15a2155640a1bab58
libosmocore Ic9dba0e4a1eb5a7dc3cee2f181b9024ed4fc7005
Change-Id: I98ee6a06b3aa6a67adb868e0b63b0e04eb42eb50
2017-10-16 23:58:24 +00:00
|
|
|
OP=c01ffedc1cadaeac1d1f1edacac1ab0a
|
|
|
|
IND-bitlen=5
|
2017-10-06 00:59:54 +00:00
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 delete
|
|
|
|
% Deleted subscriber for IMSI '123456789023000'
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 show
|
|
|
|
% No subscriber for imsi = '123456789023000'
|
|
|
|
OsmoHLR# subscriber id 1 show
|
|
|
|
% No subscriber for id = '1'
|
|
|
|
OsmoHLR# subscriber msisdn 423 show
|
|
|
|
% No subscriber for msisdn = '423'
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 create
|
|
|
|
% Created subscriber 123456789023000
|
|
|
|
ID: 1
|
|
|
|
IMSI: 123456789023000
|
|
|
|
MSISDN: none
|
|
|
|
|
|
|
|
OsmoHLR# subscriber imsi 123456789023000 delete
|
|
|
|
% Deleted subscriber for IMSI '123456789023000'
|