diff options
Diffstat (limited to 'src/hlr_vty.c')
-rw-r--r-- | src/hlr_vty.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/src/hlr_vty.c b/src/hlr_vty.c index e4cc4be..e6567cc 100644 --- a/src/hlr_vty.c +++ b/src/hlr_vty.c @@ -33,6 +33,7 @@ #include <osmocom/vty/misc.h> #include <osmocom/abis/ipa.h> +#include "db.h" #include "hlr.h" #include "hlr_vty.h" #include "hlr_vty_subscr.h" @@ -76,6 +77,23 @@ static int config_write_hlr(struct vty *vty) vty_out(vty, " store-imei%s", VTY_NEWLINE); if (g_hlr->db_file_path && strcmp(g_hlr->db_file_path, HLR_DEFAULT_DB_FILE_PATH)) vty_out(vty, " database %s%s", g_hlr->db_file_path, VTY_NEWLINE); + if (g_hlr->subscr_create_on_demand) { + const char *flags_str = "none"; + uint8_t flags = g_hlr->subscr_create_on_demand_flags; + unsigned int rand_msisdn_len = g_hlr->subscr_create_on_demand_rand_msisdn_len; + + if ((flags & DB_SUBSCR_FLAG_NAM_CS) && (flags & DB_SUBSCR_FLAG_NAM_PS)) + flags_str = "cs+ps"; + else if (flags & DB_SUBSCR_FLAG_NAM_CS) + flags_str = "cs"; + else if (flags & DB_SUBSCR_FLAG_NAM_PS) + flags_str = "ps"; + + if (rand_msisdn_len) + vty_out(vty, " subscriber-create-on-demand %i %s%s", rand_msisdn_len, flags_str, VTY_NEWLINE); + else + vty_out(vty, " subscriber-create-on-demand no-msisdn %s%s", flags_str, VTY_NEWLINE); + } return CMD_SUCCESS; } @@ -336,6 +354,42 @@ DEFUN(cfg_no_store_imei, cfg_no_store_imei_cmd, return CMD_SUCCESS; } +DEFUN(cfg_subscr_create_on_demand, cfg_subscr_create_on_demand_cmd, + "subscriber-create-on-demand (no-msisdn|<3-15>) (none|cs|ps|cs+ps)", + "Make a new record when a subscriber is first seen.\n" + "Do not automatically assign MSISDN.\n" + "Length of an automatically assigned MSISDN.\n" + "Do not allow any NAM (Network Access Mode) by default.\n" + "Allow access to circuit switched NAM by default.\n" + "Allow access to packet switched NAM by default.\n" + "Allow access to circuit and packet switched NAM by default.\n") +{ + unsigned int rand_msisdn_len = 0; + uint8_t flags = 0x00; + + if (strcmp(argv[0], "no-msisdn") != 0) + rand_msisdn_len = atoi(argv[0]); + + if (strstr(argv[1], "cs")) + flags |= DB_SUBSCR_FLAG_NAM_CS; + if (strstr(argv[1], "ps")) + flags |= DB_SUBSCR_FLAG_NAM_PS; + + g_hlr->subscr_create_on_demand = true; + g_hlr->subscr_create_on_demand_rand_msisdn_len = rand_msisdn_len; + g_hlr->subscr_create_on_demand_flags = flags; + + return CMD_SUCCESS; +} + +DEFUN(cfg_no_subscr_create_on_demand, cfg_no_subscr_create_on_demand_cmd, + "no subscriber-create-on-demand", + "Do not make a new record when a subscriber is first seen.\n") +{ + g_hlr->subscr_create_on_demand = false; + return CMD_SUCCESS; +} + /*********************************************************************** * Common Code ***********************************************************************/ @@ -404,6 +458,8 @@ void hlr_vty_init(const struct log_info *cat) install_element(HLR_NODE, &cfg_ncss_guard_timeout_cmd); install_element(HLR_NODE, &cfg_store_imei_cmd); install_element(HLR_NODE, &cfg_no_store_imei_cmd); + install_element(HLR_NODE, &cfg_subscr_create_on_demand_cmd); + install_element(HLR_NODE, &cfg_no_subscr_create_on_demand_cmd); hlr_vty_subscriber_init(); } |