[mobile] Adding security warning, if default IMEI is not changed
[osmocom-bb.git] / src / host / layer23 / src / mobile / app_mobile.c
index 1bedb55..164f3ed 100644 (file)
 #include <osmocom/bb/mobile/mncc.h>
 #include <osmocom/vty/telnet_interface.h>
 
-#include <osmocore/msgb.h>
-#include <osmocore/talloc.h>
-#include <osmocore/select.h>
-#include <osmocore/signal.h>
+#include <osmocom/core/msgb.h>
+#include <osmocom/core/talloc.h>
+#include <osmocom/core/select.h>
+#include <osmocom/core/signal.h>
+
+#include <l1ctl_proto.h>
 
 extern void *l23_ctx;
 extern struct llist_head ms_list;
@@ -143,8 +145,7 @@ int mobile_exit(struct osmocom_ms *ms, int force)
        gsm_subscr_exit(ms);
        gsm48_cc_exit(ms);
        gsm_sim_exit(ms);
-       lapdm_exit(&ms->l2_entity.lapdm_acch);
-       lapdm_exit(&ms->l2_entity.lapdm_dcch);
+       lapdm_channel_exit(&ms->lapdm_channel);
 
        ms->shutdown = 2; /* being down */
        vty_notify(ms, NULL);
@@ -159,8 +160,11 @@ int mobile_init(struct osmocom_ms *ms)
 {
        int rc;
 
-       lapdm_init(&ms->l2_entity.lapdm_dcch, ms);
-       lapdm_init(&ms->l2_entity.lapdm_acch, ms);
+       gsm_settings_arfcn(ms);
+
+       lapdm_channel_init(&ms->lapdm_channel, LAPDM_MODE_MS);
+       lapdm_channel_set_l1(&ms->lapdm_channel, l1ctl_ph_prim_cb, ms);
+
        gsm_sim_init(ms);
        gsm48_cc_init(ms);
        gsm_subscr_init(ms);
@@ -199,6 +203,13 @@ int mobile_init(struct osmocom_ms *ms)
        ms->shutdown = 0;
        ms->started = 0;
 
+       if (!strcmp(ms->settings.imei, "000000000000000")) {
+               printf("***\nWarning: Mobile '%s' has default IMEI: %s\n",
+                       ms->name, ms->settings.imei);
+               printf("This could relate your identitiy to other users with "
+                       "default IMEI.\n***\n");
+       }
+
        l1ctl_tx_reset_req(ms, L1CTL_RES_T_FULL);
        printf("Mobile '%s' initialized, please start phone now!\n", ms->name);
        return 0;
@@ -329,9 +340,9 @@ int l23_app_work(int *_quit)
 /* global exit */
 int l23_app_exit(void)
 {
-       unregister_signal_handler(SS_L1CTL, &gsm322_l1_signal, NULL);
-       unregister_signal_handler(SS_L1CTL, &mobile_signal_cb, NULL);
-       unregister_signal_handler(SS_GLOBAL, &global_signal_cb, NULL);
+       osmo_signal_unregister_handler(SS_L1CTL, &gsm322_l1_signal, NULL);
+       osmo_signal_unregister_handler(SS_L1CTL, &mobile_signal_cb, NULL);
+       osmo_signal_unregister_handler(SS_GLOBAL, &global_signal_cb, NULL);
 
        osmo_gps_close();
 
@@ -349,7 +360,7 @@ int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
        const char *config_file, uint16_t vty_port)
 {
        struct telnet_connection dummy_conn;
-       int rc;
+       int rc = 0;
 
        mncc_recv_app = mncc_recv;
 
@@ -359,13 +370,15 @@ int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
        ms_vty_init();
        dummy_conn.priv = NULL;
        vty_reading = 1;
-       rc = vty_read_config_file(config_file, &dummy_conn);
-       if (rc < 0) {
-               fprintf(stderr, "Failed to parse the config file: '%s'\n",
-                       config_file);
-               fprintf(stderr, "Please check or create config file using: "
-                       "'touch %s'\n", config_file);
-               return rc;
+       if (config_file != NULL) {
+               rc = vty_read_config_file(config_file, &dummy_conn);
+               if (rc < 0) {
+                       fprintf(stderr, "Failed to parse the config file:"
+                                       " '%s'\n", config_file);
+                       fprintf(stderr, "Please check or create config file"
+                                       " using: 'touch %s'\n", config_file);
+                       return rc;
+               }
        }
        vty_reading = 0;
        telnet_init(l23_ctx, NULL, vty_port);
@@ -373,9 +386,9 @@ int l23_app_init(int (*mncc_recv)(struct osmocom_ms *ms, int, void *),
                return rc;
        printf("VTY available on port %u.\n", vty_port);
 
-       register_signal_handler(SS_GLOBAL, &global_signal_cb, NULL);
-       register_signal_handler(SS_L1CTL, &mobile_signal_cb, NULL);
-       register_signal_handler(SS_L1CTL, &gsm322_l1_signal, NULL);
+       osmo_signal_register_handler(SS_GLOBAL, &global_signal_cb, NULL);
+       osmo_signal_register_handler(SS_L1CTL, &mobile_signal_cb, NULL);
+       osmo_signal_register_handler(SS_L1CTL, &gsm322_l1_signal, NULL);
 
        if (llist_empty(&ms_list)) {
                struct osmocom_ms *ms;