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
This commit is contained in:
Harald Welte 2019-04-01 21:03:02 +02:00
parent 0138bb40b4
commit 2513d81625
4 changed files with 27 additions and 19 deletions

View File

@ -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.

View File

@ -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;

View File

@ -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)

View File

@ -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);