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:
parent
0138bb40b4
commit
2513d81625
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue