bankd: Add command-line arguments for IP/port/etc configuration

Change-Id: Ifafdd7ea005347f39d9adad2b50cf81609b41cba
This commit is contained in:
Harald Welte 2019-04-01 09:36:42 +02:00
parent b54a51eec2
commit 5bae20b64d
3 changed files with 181 additions and 1 deletions

View File

@ -0,0 +1,51 @@
== remsim-bankd
=== Running
remsim-bankd currently has the following command-line options:
==== SYNOPSIS
*remsim-bankd* [-h] [-i A.B.C.D] [-p <1-65535>] [-b <1-65535>] [-I A.B.C.D] [-P <1-65535> ]
==== OPTIONS
*-h, --help*::
Print a short help message about the supported options
*-i, --server-ip A.B.C.D*::
Specify the remote IP address of the remsim-server to which this bankd
shall establish its <<RSPRO>> control connection
*-p, --server-port <1-65535>*::
Specify the remote TCP port number of the remsim-server to whihc this bankd
shall establish its <<RSPRO>> control connection
*-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.
*-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.
*-P, --bind-port <1-65535>*::
Specify the local TCP port to whicc the socket for incoming connections
from remsim-clients is bound to.
=== Logging
remsim-bankd currently logs to stdout only, and the logging verbosity
is not yet configurable. However, as the libosmocore logging framework
is used, extending this is an easy modification.
=== `bankd_pcsc_slots.csv` CSV file
bankd expects a CSV file `bankd_pcsc_slots.csv` in the current working directory at startup.
This CSV file specifies the mapping between the string names of the PCSC
readers and the <<RSPRO>> bandk/slot numbers. The format is as follows:
.Example: CSV file mapping bankd slots 0..4 to an ACS ACR33U-A1 reader slots
----
"1","0","ACS ACR33 ICC Reader 00 00"
"1","1","ACS ACR33 ICC Reader 00 01"
"1","2","ACS ACR33 ICC Reader 00 02"
"1","3","ACS ACR33 ICC Reader 00 03"
"1","4","ACS ACR33 ICC Reader 00 04"
----

View File

@ -0,0 +1,70 @@
== simtrace2-remsim-client
=== Running
simtrace2-remsim-client currently has the following command-line options:
==== SYNOPSIS
*simtrace2-remsim-client* [...]
==== OPTIONS
*-h, --help*::
Print a short help message about the supported options
*-s, --server-host A.B.C.D*::
Specify the remote IP address / hostname of the remsim-server to which
this client shall establish its <<RSPRO>> control connection
*-p, --server-port <1-65535>*::
Specify the remote TCP port number of the remsim-server to which this client
shall establish its <<RSPRO>> control connection
*-c, --client-id <1-65535>*::
Specify the numeric client identifier of the SIM bank this bankd
instance operates. The tuple of client-id and client-slot must be unique
among all clients connecting to the same remsim-server.
*-n, --client-slot <0-65535>*::
Specify the slot number served within this client. The tuple of
client-id and client-slot must be unique among all clients connecting
to the same remsim-server.
*-i, --gsmtap-ip A.B.C.D*::
Specify the IP address (if any) to which APDU traces are sent in
GSMTAP format (useful for debugging; supported by wireshark).
*-k, --keep-running*::
Specify if the remsim-client should terminate after handling one
session, or whether it should keep running. Fast respawn (i.e. no
--keep-running) is probably the more robust option at this point.
*-V, --usb-vendor*::
Specify the USB Vendor ID of the USB device served by this client,
use e.g. 0x1d50 for SIMtrace2, sysmoQMOD and OWHW.
*-P, --usb-product*::
Specify the USB Product ID of the USB device served by this client,
use e.g. 0x4004 for sysmoQMOD.
*-C, --usb-config*::
Specify the USB Cofiguration number of the USB device served by this
client. Default will use current configuration of the device.
*-I, --usb-interface*::
Specify the USB Interface number (within active configuration) of the
USB device served by this client. Default will use FIXME.
*-S, --usb-altsetting*::
Specify the USB Alternate Setting to be used within the USB Interface
of the USB device served by this client. Default will use FIXME.
*-A, --usb-address <0-255>*::
Specify the USB Address of the USB device served by this client. This
is useful in case multiple identical USB devices are attached to the
same host. However, the address changed at every re-enumeration and
it's therefor recommended to use the USB path (see below).
*-H, --usb-path*::
Specify the USB path of the USB device served by this client. This is
usefule to disambiguate between multiple identical USB devices
attached to the same host. You don't need this if you have only one
SIM emulation device attached to your system.
*-a, --atr HEXSTRING*::
Specify the initial ATR to be communicated to the modem/phone. Can
and will later be overridden by the ATR as specified by remsim-bankd
once a card has been mapped to this client.
=== Logging
remsim-client currently logs to stdout only, and the logging verbosity
is not yet configurable. However, as the libosmocore logging framework
is used, extending this is an easy modification.

View File

@ -28,6 +28,7 @@
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <errno.h> #include <errno.h>
#include <getopt.h>
#include <pthread.h> #include <pthread.h>
@ -215,9 +216,67 @@ static int bankd_srvc_handle_rx(struct rspro_server_conn *srvc, const RsproPDU_t
return 0; return 0;
} }
static void printf_help()
{
printf(
" -h --help Print this help message\n"
" -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"
" -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"
" connectionss (default: 9999)\n"
);
}
static int g_bind_port = 9999;
static char *g_bind_ip = NULL;
void handle_options(int argc, char **argv) void handle_options(int argc, char **argv)
{ {
while (1) {
int option_index = 0, c;
static const struct option long_options[] = {
{ "help", 0, 0, 'h' },
{ "server-host", 1, 0, 'i' },
{ "server-port", 1, 0, 'p' },
{ "bank-id", 1, 0, 'b' },
{ "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);
if (c == -1)
break;
switch (c) {
case 'h':
printf_help();
exit(0);
break;
case 'i':
g_bankd->srvc.server_host = optarg;
break;
case 'p':
g_bankd->srvc.server_port = atoi(optarg);
break;
case 'b':
g_bankd->cfg.bank_id = atoi(optarg);
break;
case 'N':
OSMO_STRLCPY_ARRAY(g_bankd->srvc.own_comp_id.name, optarg);
break;
case 'I':
g_bind_ip = optarg;
break;
case 'P':
g_bind_port = atoi(optarg);
break;
}
}
} }
int main(int argc, char **argv) int main(int argc, char **argv)
@ -253,7 +312,7 @@ int main(int argc, char **argv)
} }
/* create listening socket for inbound client connections */ /* create listening socket for inbound client connections */
rc = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 9999, OSMO_SOCK_F_BIND); rc = osmo_sock_init(AF_INET, SOCK_STREAM, IPPROTO_TCP, g_bind_ip, g_bind_port, OSMO_SOCK_F_BIND);
if (rc < 0) if (rc < 0)
exit(1); exit(1);
g_bankd->accept_fd = rc; g_bankd->accept_fd = rc;