aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2019-04-01 21:03:02 +0200
committerHarald Welte <laforge@gnumonks.org>2019-04-01 21:07:02 +0200
commit2513d8162589a8a32a5694d01d4d938e6aca026c (patch)
treea745c385f8fc4feab01f7c6e3c15951523bdc90d
parent0138bb40b4084a82d5997cf1333e90cb906c3dc9 (diff)
bankd: move bank_id / num_slots from g_bankd to remsim_srv_conn
... and make num_slots configurable via command line argument Change-Id: Id8f15085b397186d3470f4d943979857b6811a52
-rw-r--r--doc/manuals/chapters/remsim-bankd.adoc4
-rw-r--r--src/bankd.h5
-rw-r--r--src/bankd_main.c31
-rw-r--r--src/rspro_client_fsm.h6
4 files changed, 27 insertions, 19 deletions
diff --git a/doc/manuals/chapters/remsim-bankd.adoc b/doc/manuals/chapters/remsim-bankd.adoc
index fa8ce38..7e83621 100644
--- a/doc/manuals/chapters/remsim-bankd.adoc
+++ b/doc/manuals/chapters/remsim-bankd.adoc
@@ -60,7 +60,7 @@ approach seems to make more sense.
==== SYNOPSIS
-*remsim-bankd* [-h] [-i A.B.C.D] [-p <1-65535>] [-b <1-65535>] [-I A.B.C.D] [-P <1-65535> ]
+*remsim-bankd* [-h] [-i A.B.C.D] [-p <1-65535>] [-b <1-65535>] [-n <1-65535>] [-I A.B.C.D] [-P <1-65535> ]
==== OPTIONS
@@ -75,6 +75,8 @@ approach seems to make more sense.
*-b, --bank-id <1-65535>*::
Specify the numeric bank identifier of the SIM bank this bankd instance
operates. Must be unique among all banks connecting to the same remsim-server.
+*-n, --num-slots <1-65535>*::
+ Specify the number of slots that this bankd handles.
*-I, --bind-IP A.B.C.D*::
Specify the local IP address to which the socket for incoming connections
from remsim-clients is bound to.
diff --git a/src/bankd.h b/src/bankd.h
index d56734c..7f4d687 100644
--- a/src/bankd.h
+++ b/src/bankd.h
@@ -110,11 +110,6 @@ struct bankd_driver_ops {
/* global bank deamon */
struct bankd {
- struct {
- uint16_t bank_id;
- uint16_t num_slots;
- } cfg;
-
struct app_comp_id comp_id;
/* RSPRO connection to the remsim-server */
struct rspro_server_conn srvc;
diff --git a/src/bankd_main.c b/src/bankd_main.c
index 0b4a718..8ac5909 100644
--- a/src/bankd_main.c
+++ b/src/bankd_main.c
@@ -82,8 +82,8 @@ static void bankd_init(struct bankd *bankd)
pthread_mutex_init(&bankd->workers_mutex, NULL);
/* set some defaults, overridden by commandline/config */
- bankd->cfg.bank_id = 1;
- bankd->cfg.num_slots = 8;
+ bankd->srvc.bankd.bank_id = 1;
+ bankd->srvc.bankd.num_slots = 8;
bankd->comp_id.type = ComponentType_remsimBankd;
OSMO_STRLCPY_ARRAY(bankd->comp_id.name, "fixme-name");
@@ -149,13 +149,13 @@ static int bankd_srvc_handle_rx(struct rspro_server_conn *srvc, const RsproPDU_t
break;
case RsproPDUchoice_PR_createMappingReq:
creq = &pdu->msg.choice.createMappingReq;
- if (creq->bank.bankId != g_bankd->cfg.bank_id) {
+ if (creq->bank.bankId != g_bankd->srvc.bankd.bank_id) {
LOGPFSML(srvc->fi, LOGL_ERROR, "createMapping specifies invalid Bank ID %lu "
- "(we are %u)\n", creq->bank.bankId, g_bankd->cfg.bank_id);
+ "(we are %u)\n", creq->bank.bankId, g_bankd->srvc.bankd.bank_id);
resp = rspro_gen_CreateMappingRes(ResultCode_illegalBankId);
- } else if (creq->bank.slotNr >= g_bankd->cfg.num_slots) {
+ } else if (creq->bank.slotNr >= g_bankd->srvc.bankd.num_slots) {
LOGPFSML(srvc->fi, LOGL_ERROR, "createMapping specifies invalid Slot Nr %lu "
- "(we have %u)\n", creq->bank.slotNr, g_bankd->cfg.num_slots);
+ "(we have %u)\n", creq->bank.slotNr, g_bankd->srvc.bankd.num_slots);
resp = rspro_gen_CreateMappingRes(ResultCode_illegalSlotId);
} else {
rspro2bank_slot(&bs, &creq->bank);
@@ -172,13 +172,13 @@ static int bankd_srvc_handle_rx(struct rspro_server_conn *srvc, const RsproPDU_t
break;
case RsproPDUchoice_PR_removeMappingReq:
rreq = &pdu->msg.choice.removeMappingReq;
- if (rreq->bank.bankId != g_bankd->cfg.bank_id) {
+ if (rreq->bank.bankId != g_bankd->srvc.bankd.bank_id) {
LOGPFSML(srvc->fi, LOGL_ERROR, "removeMapping specifies invalid Bank ID %lu "
- "(we are %u)\n", creq->bank.bankId, g_bankd->cfg.bank_id);
+ "(we are %u)\n", creq->bank.bankId, g_bankd->srvc.bankd.bank_id);
resp = rspro_gen_RemoveMappingRes(ResultCode_illegalBankId);
- } else if (rreq->bank.slotNr >= g_bankd->cfg.num_slots) {
+ } else if (rreq->bank.slotNr >= g_bankd->srvc.bankd.num_slots) {
LOGPFSML(srvc->fi, LOGL_ERROR, "removeMapping specifies invalid Slot Nr %lu "
- "(we have %u)\n", creq->bank.slotNr, g_bankd->cfg.num_slots);
+ "(we have %u)\n", creq->bank.slotNr, g_bankd->srvc.bankd.num_slots);
resp = rspro_gen_RemoveMappingRes(ResultCode_illegalSlotId);
} else {
rspro2bank_slot(&bs, &rreq->bank);
@@ -223,6 +223,7 @@ static void printf_help()
" -i --server-host A.B.C.D remsim-server IP address (default: 127.0.0.1)\n"
" -p --server-port <1-65535> remsim-server TCP port (default: 9998)\n"
" -b --bank-id <1-65535> Bank Identifier of this SIM bank (default: 1)\n"
+" -b --num-slots <1-65535> Number of Slots in this SIM bank (default: 8)\n"
" -I --bind-ip A.B.C.D Local IP address to bind for incoming client\n"
" connections (default: INADDR_ANY)\n"
" -P --bind-port <1-65535> Local TCP port to bind for incoming client\n"
@@ -242,13 +243,14 @@ void handle_options(int argc, char **argv)
{ "server-host", 1, 0, 'i' },
{ "server-port", 1, 0, 'p' },
{ "bank-id", 1, 0, 'b' },
+ { "num-slots", 1, 0, 'n' },
{ "component-name", 1, 0, 'N' },
{ "bind-ip", 1, 0, 'I' },
{ "bind-port", 1, 0, 'P' },
{ 0, 0, 0, 0 }
};
- c = getopt_long(argc, argv, "hi:o:b:N:I:P:", long_options, &option_index);
+ c = getopt_long(argc, argv, "hi:o:b:n:N:I:P:", long_options, &option_index);
if (c == -1)
break;
@@ -264,7 +266,10 @@ void handle_options(int argc, char **argv)
g_bankd->srvc.server_port = atoi(optarg);
break;
case 'b':
- g_bankd->cfg.bank_id = atoi(optarg);
+ g_bankd->srvc.bankd.bank_id = atoi(optarg);
+ break;
+ case 'n':
+ g_bankd->srvc.bankd.num_slots = atoi(optarg);
break;
case 'N':
OSMO_STRLCPY_ARRAY(g_bankd->srvc.own_comp_id.name, optarg);
@@ -318,7 +323,7 @@ int main(int argc, char **argv)
g_bankd->accept_fd = rc;
/* create worker threads: One per reader/slot! */
- for (i = 0; i < g_bankd->cfg.num_slots; i++) {
+ for (i = 0; i < g_bankd->srvc.bankd.num_slots; i++) {
struct bankd_worker *w;
w = bankd_create_worker(g_bankd, i);
if (!w)
diff --git a/src/rspro_client_fsm.h b/src/rspro_client_fsm.h
index ea88333..8e7f58c 100644
--- a/src/rspro_client_fsm.h
+++ b/src/rspro_client_fsm.h
@@ -34,6 +34,12 @@ struct rspro_server_conn {
/* configuration */
char *server_host;
uint16_t server_port;
+
+ /* only in case we are representing a bankd client */
+ struct {
+ uint16_t bank_id;
+ uint16_t num_slots;
+ } bankd;
};
int ipa_client_conn_send_rspro(struct ipa_client_conn *ipa, RsproPDU_t *rspro);