summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <axilirator@gmail.com>2017-09-08 18:51:53 +0300
committerVadim Yanitskiy <axilirator@gmail.com>2018-10-03 18:43:07 +0700
commite35308f50a23e3a676cc0cbcb25ac55c0bc98433 (patch)
tree22adcdbd6b0ec0303c40177945e08c9066e7dfc1
parentb52a5db584bbeabf6e8b4fbf2a2ad071b9568dbe (diff)
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
-rw-r--r--doc/examples/mobile/default.cfg1
-rw-r--r--doc/examples/mobile/multi_ms.cfg2
-rw-r--r--src/host/layer23/include/osmocom/bb/mobile/settings.h1
-rw-r--r--src/host/layer23/src/mobile/app_mobile.c16
-rw-r--r--src/host/layer23/src/mobile/settings.c5
-rw-r--r--src/host/layer23/src/mobile/vty_interface.c16
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.<ms_name>'")
+{
+ 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);