From e35308f50a23e3a676cc0cbcb25ac55c0bc98433 Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Fri, 8 Sep 2017 18:51:53 +0300 Subject: mobile: add MNCC socket path to settings Previously the MNCC socket path was generated automatically, using concatenation of the '/tmp/ms_mncc_' prefix and MS name. Let's allow user to specify this manually, keeping a similar generation method for default value. Change-Id: I643356ac579bc5e765f668265ec803b22a73739c --- doc/examples/mobile/default.cfg | 1 + doc/examples/mobile/multi_ms.cfg | 2 ++ src/host/layer23/include/osmocom/bb/mobile/settings.h | 1 + src/host/layer23/src/mobile/app_mobile.c | 16 ++++++++++------ src/host/layer23/src/mobile/settings.c | 5 +++++ src/host/layer23/src/mobile/vty_interface.c | 16 ++++++++++++++++ 6 files changed, 35 insertions(+), 6 deletions(-) diff --git a/doc/examples/mobile/default.cfg b/doc/examples/mobile/default.cfg index cc816305..c2d05941 100644 --- a/doc/examples/mobile/default.cfg +++ b/doc/examples/mobile/default.cfg @@ -14,6 +14,7 @@ no hide-default ms 1 layer2-socket /tmp/osmocom_l2 sap-socket /tmp/osmocom_sap + mncc-socket /tmp/ms_mncc.1 sim reader network-selection-mode auto imei 000000000000000 0 diff --git a/doc/examples/mobile/multi_ms.cfg b/doc/examples/mobile/multi_ms.cfg index bef2406e..d42cad0c 100644 --- a/doc/examples/mobile/multi_ms.cfg +++ b/doc/examples/mobile/multi_ms.cfg @@ -14,6 +14,7 @@ no hide-default ms one layer2-socket /tmp/osmocom_l2.one sap-socket /tmp/osmocom_sap.one + mncc-socket /tmp/ms_mncc.one sim reader network-selection-mode auto imei 000000000000000 0 @@ -64,6 +65,7 @@ ms one ms two layer2-socket /tmp/osmocom_l2.two sap-socket /tmp/osmocom_sap.two + mncc-socket /tmp/ms_mncc.two sim reader network-selection-mode auto imei 000000000000000 0 diff --git a/src/host/layer23/include/osmocom/bb/mobile/settings.h b/src/host/layer23/include/osmocom/bb/mobile/settings.h index 4e5d5a19..30e88258 100644 --- a/src/host/layer23/include/osmocom/bb/mobile/settings.h +++ b/src/host/layer23/include/osmocom/bb/mobile/settings.h @@ -6,6 +6,7 @@ struct gsm_settings { char layer2_socket_path[128]; char sap_socket_path[128]; + char mncc_socket_path[128]; /* IMEI */ char imei[16]; diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index b0e2a138..cbae4217 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -273,6 +273,14 @@ int mobile_start(struct osmocom_ms *ms, char **other_name) *other_name = tmp->name; return -2; } + if (!strcmp(ms->settings.mncc_socket_path, + tmp->settings.mncc_socket_path)) { + LOGP(DMOB, LOGL_ERROR, "Cannot start MS '%s', because MS '%s' " + "use the same mncc-socket.\nPlease shutdown " + "MS '%s' first.\n", ms->name, tmp->name, tmp->name); + *other_name = tmp->name; + return -1; + } } rc = mobile_init(ms); @@ -295,7 +303,6 @@ int mobile_stop(struct osmocom_ms *ms, int force) struct osmocom_ms *mobile_new(char *name) { static struct osmocom_ms *ms; - char *mncc_name; ms = talloc_zero(l23_ctx, struct osmocom_ms); if (!ms) { @@ -317,12 +324,9 @@ struct osmocom_ms *mobile_new(char *name) mobile_set_shutdown(ms, MS_SHUTDOWN_COMPL); if (mncc_recv_app) { - mncc_name = talloc_asprintf(ms, "/tmp/ms_mncc_%s", ms->name); - ms->mncc_entity.mncc_recv = mncc_recv_app; - ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name); - - talloc_free(mncc_name); + ms->mncc_entity.sock_state = mncc_sock_init(ms, + ms->settings.mncc_socket_path); } else if (ms->settings.ch_cap == GSM_CAP_SDCCH) ms->mncc_entity.mncc_recv = mncc_recv_dummy; else diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c index a4bb4e36..16d005cf 100644 --- a/src/host/layer23/src/mobile/settings.c +++ b/src/host/layer23/src/mobile/settings.c @@ -32,6 +32,7 @@ static char *layer2_socket_path = "/tmp/osmocom_l2"; static char *sap_socket_path = "/tmp/osmocom_sap"; +static char *mncc_socket_path = "/tmp/ms_mncc.%s"; int gsm_settings_init(struct osmocom_ms *ms) { @@ -41,6 +42,10 @@ int gsm_settings_init(struct osmocom_ms *ms) strcpy(set->layer2_socket_path, layer2_socket_path); strcpy(set->sap_socket_path, sap_socket_path); + /* Compose MNCC socket path using MS name */ + snprintf(set->mncc_socket_path, sizeof(set->mncc_socket_path) - 1, + mncc_socket_path, ms->name); + /* network search */ set->plmn_mode = PLMN_MODE_AUTO; diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c index 12c32a53..d8c0144e 100644 --- a/src/host/layer23/src/mobile/vty_interface.c +++ b/src/host/layer23/src/mobile/vty_interface.c @@ -1325,6 +1325,7 @@ static void config_write_ms(struct vty *vty, struct osmocom_ms *ms) vty_out(vty, " layer2-socket %s%s", set->layer2_socket_path, VTY_NEWLINE); vty_out(vty, " sap-socket %s%s", set->sap_socket_path, VTY_NEWLINE); + vty_out(vty, " mncc-socket %s%s", set->mncc_socket_path, VTY_NEWLINE); switch(set->sim_type) { case GSM_SIM_TYPE_NONE: vty_out(vty, " sim none%s", VTY_NEWLINE); @@ -1601,6 +1602,20 @@ DEFUN(cfg_ms_sap, cfg_ms_sap_cmd, "sap-socket PATH", return CMD_SUCCESS; } +DEFUN(cfg_ms_mncc, cfg_ms_mncc_cmd, "mncc-socket PATH", + "Define socket path for MNCC interface\n" + "Unix socket, default '/tmp/ms_mncc.'") +{ + struct osmocom_ms *ms = vty->index; + struct gsm_settings *set = &ms->settings; + + strncpy(set->mncc_socket_path, argv[0], + sizeof(set->mncc_socket_path) - 1); + + vty_restart(vty, ms); + return CMD_SUCCESS; +} + DEFUN(cfg_ms_sim, cfg_ms_sim_cmd, "sim (none|reader|test|sap)", "Set SIM card to attach when powering on\nAttach no SIM\n" "Attach SIM from reader\nAttach bulit in test SIM\n" @@ -2889,6 +2904,7 @@ int ms_vty_init(void) install_element(MS_NODE, &cfg_ms_show_this_cmd); install_element(MS_NODE, &cfg_ms_layer2_cmd); install_element(MS_NODE, &cfg_ms_sap_cmd); + install_element(MS_NODE, &cfg_ms_mncc_cmd); install_element(MS_NODE, &cfg_ms_sim_cmd); install_element(MS_NODE, &cfg_ms_mode_cmd); install_element(MS_NODE, &cfg_ms_imei_cmd); -- cgit v1.2.3