Make extending subscriber creation easier
* rename variable controlling subscriber creation * use enum for subscriber creation policy * move check for subscriber creation policy into separate static function Related: OS#1658, OS#1647 Change-Id: I3b10a9a764fd3a7bb96717a990e52caae16266da Reviewed-on: https://gerrit.osmocom.org/42 Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <holger@freyther.de>
This commit is contained in:
parent
8a4d2e756d
commit
e21cf38da4
|
@ -19,6 +19,11 @@ struct gsm_subscriber_group;
|
|||
|
||||
#define OBSC_LINKID_CB(__msgb) (__msgb)->cb[3]
|
||||
|
||||
enum gsm_subscr_creation_mode {
|
||||
GSM_SUBSCR_DONT_CREATE = 0,
|
||||
GSM_SUBSCR_CREAT_W_RAND_EXT = 1,
|
||||
};
|
||||
|
||||
enum gsm_security_event {
|
||||
GSM_SECURITY_NOAVAIL,
|
||||
GSM_SECURITY_AUTH_FAILED,
|
||||
|
@ -278,7 +283,7 @@ struct gsm_network {
|
|||
struct osmo_bsc_data *bsc_data;
|
||||
|
||||
/* subscriber related features */
|
||||
int create_subscriber;
|
||||
int subscr_creation_mode;
|
||||
struct gsm_subscriber_group *subscr_group;
|
||||
struct gsm_sms_queue *sms_queue;
|
||||
|
||||
|
|
|
@ -48,7 +48,7 @@ struct gsm_network *gsm_network_init(uint16_t country_code, uint16_t network_cod
|
|||
INIT_LLIST_HEAD(&net->bsc_data->mscs);
|
||||
|
||||
net->subscr_group->net = net;
|
||||
net->create_subscriber = 1;
|
||||
net->subscr_creation_mode = GSM_SUBSCR_CREAT_W_RAND_EXT;
|
||||
|
||||
net->country_code = country_code;
|
||||
net->network_code = network_code;
|
||||
|
|
|
@ -507,6 +507,14 @@ static int mm_tx_identity_req(struct gsm_subscriber_connection *conn, uint8_t id
|
|||
return gsm48_conn_sendmsg(msg, conn, NULL);
|
||||
}
|
||||
|
||||
static struct gsm_subscriber *subscr_create(const struct gsm_network *net,
|
||||
const char *imsi)
|
||||
{
|
||||
if (net->subscr_creation_mode != GSM_SUBSCR_DONT_CREATE)
|
||||
return subscr_create_subscriber(net->subscr_group, imsi);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Parse Chapter 9.2.11 Identity Response */
|
||||
static int mm_rx_id_resp(struct gsm_subscriber_connection *conn, struct msgb *msg)
|
||||
|
@ -530,9 +538,8 @@ static int mm_rx_id_resp(struct gsm_subscriber_connection *conn, struct msgb *ms
|
|||
if (!conn->subscr) {
|
||||
conn->subscr = subscr_get_by_imsi(net->subscr_group,
|
||||
mi_string);
|
||||
if (!conn->subscr && net->create_subscriber)
|
||||
conn->subscr = subscr_create_subscriber(
|
||||
net->subscr_group, mi_string);
|
||||
if (!conn->subscr)
|
||||
conn->subscr = subscr_create(net, mi_string);
|
||||
}
|
||||
if (!conn->subscr && conn->loc_operation) {
|
||||
gsm0408_loc_upd_rej(conn, bts->network->reject_cause);
|
||||
|
@ -641,10 +648,9 @@ static int mm_rx_loc_upd_req(struct gsm_subscriber_connection *conn, struct msgb
|
|||
|
||||
/* look up subscriber based on IMSI, create if not found */
|
||||
subscr = subscr_get_by_imsi(bts->network->subscr_group, mi_string);
|
||||
if (!subscr && bts->network->create_subscriber) {
|
||||
subscr = subscr_create_subscriber(
|
||||
bts->network->subscr_group, mi_string);
|
||||
}
|
||||
if (!subscr)
|
||||
subscr = subscr_create(bts->network, mi_string);
|
||||
|
||||
if (!subscr) {
|
||||
gsm0408_loc_upd_rej(conn, bts->network->reject_cause);
|
||||
release_loc_updating_req(conn, 0);
|
||||
|
|
|
@ -1036,7 +1036,7 @@ DEFUN(cfg_nitb_subscr_create, cfg_nitb_subscr_create_cmd,
|
|||
"Make a new record when a subscriber is first seen.\n")
|
||||
{
|
||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||
gsmnet->create_subscriber = 1;
|
||||
gsmnet->subscr_creation_mode = GSM_SUBSCR_CREAT_W_RAND_EXT;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1045,7 +1045,7 @@ DEFUN(cfg_nitb_no_subscr_create, cfg_nitb_no_subscr_create_cmd,
|
|||
NO_STR "Make a new record when a subscriber is first seen.\n")
|
||||
{
|
||||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||
gsmnet->create_subscriber = 0;
|
||||
gsmnet->subscr_creation_mode = GSM_SUBSCR_DONT_CREATE;
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -1072,7 +1072,7 @@ static int config_write_nitb(struct vty *vty)
|
|||
struct gsm_network *gsmnet = gsmnet_from_vty(vty);
|
||||
vty_out(vty, "nitb%s", VTY_NEWLINE);
|
||||
vty_out(vty, " %ssubscriber-create-on-demand%s",
|
||||
gsmnet->create_subscriber ? "" : "no ", VTY_NEWLINE);
|
||||
gsmnet->subscr_creation_mode ? "" : "no ", VTY_NEWLINE);
|
||||
vty_out(vty, " %sassign-tmsi%s",
|
||||
gsmnet->avoid_tmsi ? "no " : "", VTY_NEWLINE);
|
||||
return CMD_SUCCESS;
|
||||
|
|
Loading…
Reference in New Issue