summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/host/layer23/include/osmocom/bb/common/osmocom_data.h2
-rw-r--r--src/host/layer23/src/common/main.c3
-rw-r--r--src/host/layer23/src/mobile/app_mobile.c16
-rw-r--r--src/host/layer23/src/mobile/gsm322.c38
-rw-r--r--src/host/layer23/src/mobile/vty_interface.c2
5 files changed, 33 insertions, 28 deletions
diff --git a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h
index 17dad10d..9b544ab9 100644
--- a/src/host/layer23/include/osmocom/bb/common/osmocom_data.h
+++ b/src/host/layer23/include/osmocom/bb/common/osmocom_data.h
@@ -57,7 +57,7 @@ struct rx_meas_stat {
/* One Mobilestation for osmocom */
struct osmocom_ms {
struct llist_head entity;
- char name[32];
+ char *name;
struct osmo_wqueue l2_wq, sap_wq;
uint16_t test_arfcn;
struct osmol1_entity l1_entity;
diff --git a/src/host/layer23/src/common/main.c b/src/host/layer23/src/common/main.c
index 59cee03d..693b10e7 100644
--- a/src/host/layer23/src/common/main.c
+++ b/src/host/layer23/src/common/main.c
@@ -246,8 +246,7 @@ int main(int argc, char **argv)
llist_add_tail(&ms->entity, &ms_list);
- sprintf(ms->name, "1");
-
+ ms->name = talloc_strdup(ms, "1");
ms->test_arfcn = 871;
handle_options(argc, argv);
diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c
index c74a93ff..7dc7208c 100644
--- a/src/host/layer23/src/mobile/app_mobile.c
+++ b/src/host/layer23/src/mobile/app_mobile.c
@@ -248,32 +248,34 @@ int mobile_init(struct osmocom_ms *ms)
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) {
fprintf(stderr, "Failed to allocate MS\n");
return NULL;
}
- llist_add_tail(&ms->entity, &ms_list);
-
- strcpy(ms->name, name);
+ talloc_set_name(ms, "ms_%s", name);
+ ms->name = talloc_strdup(ms, name);
ms->l2_wq.bfd.fd = -1;
ms->sap_wq.bfd.fd = -1;
+ /* Register a new MS */
+ llist_add_tail(&ms->entity, &ms_list);
+
gsm_support_init(ms);
gsm_settings_init(ms);
ms->shutdown = 3; /* being down */
if (mncc_recv_app) {
- char name[32];
-
- sprintf(name, "/tmp/ms_mncc_%s", ms->name);
+ 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, name, l23_ctx);
+ ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name, l23_ctx);
+ talloc_free(mncc_name);
} 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/gsm322.c b/src/host/layer23/src/mobile/gsm322.c
index 993e5cab..ad6a83bf 100644
--- a/src/host/layer23/src/mobile/gsm322.c
+++ b/src/host/layer23/src/mobile/gsm322.c
@@ -5028,7 +5028,7 @@ int gsm322_init(struct osmocom_ms *ms)
struct gsm322_plmn *plmn = &ms->plmn;
struct gsm322_cellsel *cs = &ms->cellsel;
FILE *fp;
- char filename[PATH_MAX];
+ char *ba_filename;
int i;
struct gsm322_ba_list *ba;
uint8_t buf[4];
@@ -5060,8 +5060,9 @@ int gsm322_init(struct osmocom_ms *ms)
cs->list[i].flags |= GSM322_CS_FLAG_SUPPORT;
/* read BA list */
- sprintf(filename, "%s/%s.ba", config_dir, ms->name);
- fp = fopen(filename, "r");
+ ba_filename = talloc_asprintf(ms, "%s/%s.ba", config_dir, ms->name);
+ fp = fopen(ba_filename, "r");
+ talloc_free(ba_filename);
if (fp) {
int rc;
char *s_rc;
@@ -5108,7 +5109,7 @@ int gsm322_exit(struct osmocom_ms *ms)
struct llist_head *lh, *lh2;
struct msgb *msg;
FILE *fp;
- char filename[PATH_MAX];
+ char *ba_filename;
struct gsm322_ba_list *ba;
uint8_t buf[4];
int rc = 0;
@@ -5137,20 +5138,23 @@ int gsm322_exit(struct osmocom_ms *ms)
}
/* store BA list */
- sprintf(filename, "%s/%s.ba", config_dir, ms->name);
- fp = fopen(filename, "w");
- if (fp) {
- fputs(ba_version, fp);
- llist_for_each_entry(ba, &cs->ba_list, entry) {
- buf[0] = ba->mcc >> 8;
- buf[1] = ba->mcc & 0xff;
- buf[2] = ba->mnc >> 8;
- buf[3] = ba->mnc & 0xff;
-
- rc += fwrite(buf, 4, 1, fp);
- rc += fwrite(ba->freq, sizeof(ba->freq), 1, fp);
+ ba_filename = talloc_asprintf(ms, "%s/%s.ba", config_dir, ms->name);
+ if (ba_filename) {
+ fp = fopen(ba_filename, "w");
+ talloc_free(ba_filename);
+ if (fp) {
+ fputs(ba_version, fp);
+ llist_for_each_entry(ba, &cs->ba_list, entry) {
+ buf[0] = ba->mcc >> 8;
+ buf[1] = ba->mcc & 0xff;
+ buf[2] = ba->mnc >> 8;
+ buf[3] = ba->mnc & 0xff;
+
+ rc += fwrite(buf, 4, 1, fp);
+ rc += fwrite(ba->freq, sizeof(ba->freq), 1, fp);
+ }
+ fclose(fp);
}
- fclose(fp);
}
if (rc == 2)
diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c
index 78d136de..d909153b 100644
--- a/src/host/layer23/src/mobile/vty_interface.c
+++ b/src/host/layer23/src/mobile/vty_interface.c
@@ -1265,7 +1265,7 @@ DEFUN(cfg_ms_rename, cfg_ms_rename_cmd, "ms MS_NAME rename MS_NAME",
return CMD_WARNING;
}
- strncpy(ms->name, argv[1], sizeof(ms->name) - 1);
+ osmo_talloc_replace_string(ms, &ms->name, argv[1]);
return CMD_SUCCESS;
}