[layer23] Adding LAC and TMSI (both optional) to test card (rplmn)
authorAndreas.Eversberg <jolly@eversberg.eu>
Sat, 20 Nov 2010 08:32:32 +0000 (08:32 +0000)
committerAndreas.Eversberg <jolly@eversberg.eu>
Sat, 20 Nov 2010 08:32:32 +0000 (08:32 +0000)
src/host/layer23/include/osmocom/bb/mobile/settings.h
src/host/layer23/include/osmocom/bb/mobile/subscriber.h
src/host/layer23/src/mobile/app_mobile.c
src/host/layer23/src/mobile/settings.c
src/host/layer23/src/mobile/subscriber.c
src/host/layer23/src/mobile/vty_interface.c

index d0848a8..f666f37 100644 (file)
@@ -25,11 +25,13 @@ struct gsm_settings {
 
        /* test card simulator settings */
        char                    test_imsi[20]; /* just in case... */
+       uint32_t                test_tmsi;
        uint8_t                 test_ki_type;
        uint8_t                 test_ki[16]; /* 128 bit max */
        uint8_t                 test_barr;
        uint8_t                 test_rplmn_valid;
        uint16_t                test_rplmn_mcc, test_rplmn_mnc;
+       uint16_t                test_lac;
        uint8_t                 test_always; /* ...search hplmn... */
 
        /* call related settings */
index 15af5d0..c6cf57a 100644 (file)
@@ -79,7 +79,8 @@ struct gsm_subscriber {
 
 int gsm_subscr_init(struct osmocom_ms *ms);
 int gsm_subscr_exit(struct osmocom_ms *ms);
-int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc);
+int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc,
+       uint16_t lac, uint32_t tmsi);
 int gsm_subscr_simcard(struct osmocom_ms *ms);
 void gsm_subscr_sim_pin(struct osmocom_ms *ms, char *pin1, char *pin2,
        int8_t mode);
index 1461e3b..822ea64 100644 (file)
@@ -100,7 +100,8 @@ int mobile_signal_cb(unsigned int subsys, unsigned int signal,
                        break;
                case GSM_SIM_TYPE_TEST:
                        gsm_subscr_testcard(ms, set->test_rplmn_mcc,
-                                               set->test_rplmn_mnc);
+                               set->test_rplmn_mnc, set->test_lac,
+                               set->test_tmsi);
                        break;
                default:
                        /* no SIM, trigger PLMN selection process */
index 89672a2..a5a91ce 100644 (file)
@@ -50,6 +50,8 @@ int gsm_settings_init(struct osmocom_ms *ms)
        /* test SIM */
        strcpy(set->test_imsi, "001010000000000");
        set->test_rplmn_mcc = set->test_rplmn_mnc = 1;
+       set->test_lac = 0x0000;
+       set->test_tmsi = 0xffffffff;
 
        /* set all supported features */
        set->sms_ptp = sup->sms_ptp;
index 00d823c..3ba78f3 100644 (file)
@@ -153,7 +153,8 @@ int gsm_subscr_exit(struct osmocom_ms *ms)
  */
 
 /* Attach test card, no SIM must be currently attached */
-int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc)
+int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc,
+       uint16_t lac, uint32_t tmsi)
 {
        struct gsm_settings *set = &ms->settings;
        struct gsm_subscriber *subscr = &ms->subscr;
@@ -185,6 +186,10 @@ int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc)
        subscr->plmn_valid = set->test_rplmn_valid;
        subscr->plmn_mcc = mcc;
        subscr->plmn_mnc = mnc;
+       subscr->mcc = mcc;
+       subscr->mnc = mnc;
+       subscr->lac = lac;
+       subscr->tmsi = tmsi;
        subscr->always_search_hplmn = set->test_always;
        subscr->t6m_hplmn = 1; /* try to find home network every 6 min */
        strcpy(subscr->imsi, set->test_imsi);
@@ -194,9 +199,10 @@ int gsm_subscr_testcard(struct osmocom_ms *ms, uint16_t mcc, uint16_t mnc)
                gsm_imsi_mnc(subscr->imsi));
 
        if (subscr->plmn_valid)
-               LOGP(DMM, LOGL_INFO, "-> Test card registered to %s %s "
-                       "(%s, %s)\n", gsm_print_mcc(mcc), gsm_print_mnc(mnc),
-                       gsm_get_mcc(mcc), gsm_get_mnc(mcc, mnc));
+               LOGP(DMM, LOGL_INFO, "-> Test card registered to %s %s 0x%04x"
+                       "(%s, %s)\n", gsm_print_mcc(mcc),
+                       gsm_print_mnc(mnc), lac, gsm_get_mcc(mcc),
+                       gsm_get_mnc(mcc, mnc));
        else
                LOGP(DMM, LOGL_INFO, "-> Test card not registered\n");
 
index 4a164eb..59ff76c 100644 (file)
@@ -424,12 +424,14 @@ DEFUN(no_monitor_network, no_monitor_network_cmd, "no monitor network MS_NAME",
        return CMD_SUCCESS;
 }
 
-DEFUN(sim_test, sim_test_cmd, "sim testcard MS_NAME [mcc] [mnc]",
+DEFUN(sim_test, sim_test_cmd, "sim testcard MS_NAME [mcc] [mnc] [lac] [tmsi]",
        "SIM actions\nInsert test card\nName of MS (see \"show ms\")\n"
-       "Mobile Country Code of RPLMN\nMobile Network Code of RPLMN")
+       "Mobile Country Code of RPLMN\nMobile Network Code of RPLMN\n"
+       "Optionally locatio area code\nOptionally current assigned TMSI")
 {
        struct osmocom_ms *ms;
-       uint16_t mcc = 0x001, mnc = 0x01f;
+       uint16_t mcc = 0x001, mnc = 0x01f, lac = 0x0000;
+       uint32_t tmsi = 0xffffffff;
 
        ms = get_ms(argv[0], vty);
        if (!ms)
@@ -454,7 +456,13 @@ DEFUN(sim_test, sim_test_cmd, "sim testcard MS_NAME [mcc] [mnc]",
                }
        }
 
-       gsm_subscr_testcard(ms, mcc, mnc);
+       if (argc >= 4)
+               lac = strtoul(argv[3], NULL, 16);
+
+       if (argc >= 5)
+               tmsi = strtoul(argv[4], NULL, 16);
+
+       gsm_subscr_testcard(ms, mcc, mnc, lac, tmsi);
 
        return CMD_SUCCESS;
 }
@@ -1140,12 +1148,16 @@ static void config_write_ms_single(struct vty *vty, struct osmocom_ms *ms)
        }
        vty_out(vty, "  %sbarred-access%s", (set->test_barr) ? "" : "no ",
                VTY_NEWLINE);
-       if (set->test_rplmn_valid)
-               vty_out(vty, "  rplmn %s %s%s",
+       if (set->test_rplmn_valid) {
+               vty_out(vty, "  rplmn %s %s",
                        gsm_print_mcc(set->test_rplmn_mcc),
-                       gsm_print_mnc(set->test_rplmn_mnc),
-                       VTY_NEWLINE);
-       else
+                       gsm_print_mnc(set->test_rplmn_mnc));
+               if (set->test_lac > 0x0000 && set->test_lac < 0xfffe)
+                       vty_out(vty, " 0x%04x", set->test_lac);
+               if (set->test_tmsi != 0xffffffff)
+                       vty_out(vty, " 0x%08x", set->test_tmsi);
+               vty_out(vty, "%s", VTY_NEWLINE);
+       } else
                vty_out(vty, "  no rplmn%s", VTY_NEWLINE);
        vty_out(vty, "  hplmn-search %s%s", (set->test_always) ? "everywhere"
                        : "foreign-country", VTY_NEWLINE);
@@ -2024,8 +2036,10 @@ DEFUN(cfg_test_no_rplmn, cfg_test_no_rplmn_cmd, "no rplmn",
        return CMD_SUCCESS;
 }
 
-DEFUN(cfg_test_rplmn, cfg_test_rplmn_cmd, "rplmn MCC MNC",
-       "Set Registered PLMN\nMobile Country Code\nMobile Network Code")
+DEFUN(cfg_test_rplmn, cfg_test_rplmn_cmd, "rplmn MCC MNC [lac] [tmsi]",
+       "Set Registered PLMN\nMobile Country Code\nMobile Network Code\n"
+       "Optionally set locatio area code\n"
+       "Optionally set current assigned TMSI")
 {
        struct osmocom_ms *ms = vty->index;
        struct gsm_settings *set = &ms->settings;
@@ -2044,6 +2058,16 @@ DEFUN(cfg_test_rplmn, cfg_test_rplmn_cmd, "rplmn MCC MNC",
        set->test_rplmn_mcc = mcc;
        set->test_rplmn_mnc = mnc;
 
+       if (argc >= 3)
+               set->test_lac = strtoul(argv[2], NULL, 16);
+       else
+               set->test_lac = 0xfffe;
+
+       if (argc >= 4)
+               set->test_tmsi = strtoul(argv[3], NULL, 16);
+       else
+               set->test_tmsi = 0xffffffff;
+
        vty_restart(vty, ms);
        return CMD_SUCCESS;
 }