commit | 694e3b57827a92af8615facf7ccfeb08717d661d | [log] [tgz] |
---|---|---|
author | Oliver Smith <osmith@sysmocom.de> | Wed Jun 23 12:26:18 2021 +0200 |
committer | Oliver Smith <osmith@sysmocom.de> | Wed Jun 23 12:49:31 2021 +0200 |
tree | 684b25d332e1eb0ad7ba3bea40b68fb365e55d6d | |
parent | 588ec1a6195983174a5e5f95ae5e5de30709fad7 [diff] |
contrib/osmo-remsim.spec.in: fix build on opensuse It was not enough to verify that the rpm builds on centos. Set --docdir to install examples to /usr/share/doc/packages instead of /usr/share/doc in opensuse. Fix for: File not found: .../usr/share/doc/packages/osmo-remsim/examples/bankd_pcsc_slots.csv Add missing %dir statements to fix: osmo-remsim-bankd-0.2.2.113.f2a1.202106230026-lp151.1.1.x86_64.rpm: directories not owned by a package: - /etc/osmocom - /usr/share/doc/packages/osmo-remsim - /usr/share/doc/packages/osmo-remsim/examples Fixes: 905bc4d2 ("doc/examples: install bankd_pcsc_slots.csv") Change-Id: Ie5bbb25f8aa87edcea8b952d3c29aab29ac31b19
This software suite is a work in progress.
The client interfaces with GSM phones / modems via dedicated "Card Emulation" devices such as the Osmocom SIMtrace2 or sysmocom sysmoQMOD board + firmware. This hardware implements the ISO7816-3 electrical interface and protocol handling and passes any TPDU headers received from the phone/modem to osmo-remsim-client for further processing of the TPDUs associated to the given APDU transfer.
osmo-remsim-client connects via a RSPRO control connection to osmo-remsim-server at startup and registers itself. It will receive configuration data such as the osmo-remsim-bankd IP+Port and the ClientId from osmo-remsim-server.
After receiving the configuration, osmo-remsim-client will establish a RSPRO data connection to the osmo-remsim-bankd IP:Port.
As the USB interface for remote SIM in simtrace2.git uses one interface per slot, we can implement the client in blocking mode, i.e. use blocking I/O on the TCP/RSPRO side. This simplifies the code compared to a more complex async implementation.
The osmo-remsim-bankd (SIM Bank Daemon) manages one given SIM bank. The initial implementation supports a PC/SC driver to expose any PC/SC compatible card readers as SIM bank.
osmo-remsim-bankd initially connects via a RSPRO control connection to osmo-remsim-server at startup, and will in turn receive a set of initial [client,slot]:[bankd,slot] mappings. These mappings determine which slot on the client (corresponding to a modem) is mapped to which slot on the SIM bank. Mappings can be updated by osmo-remsim-server at any given point in time.
osmo-remsim-bankd implements a RSPRO server, where it listens to connections from osmo-remsim-clients.
As PC/SC only offers a blocking API, there is one thread per PC/SC slot. This thread will perform blocking I/O on the socket towards the client, and blocking API calls on PC/SC.
In terms of thread handling, we do:
The worker threads initially don't have any mapping to a specific reader, and that mapping is only established at a later point after the client has identified itself. The advantage is that the entire bankd can live without any non-blocking I/O.
The main thread handles the connection to osmo-remsim-server, where it can also use non-blocking I/O. However, re-connection would be required, to avoid stalling all banks/cards in the event of a connection loss to the server.
worker threads have the following states:
Once the client disconnects, or any other error occurs (such as card I/O errors), the worker thread either returns to INIT state (closing client socket and reader), or it terminates. Termination would mean that the main thread would have to do non-blocking join to detect client termination and then re-spawn clients, so the "return to INIT state" approach seems to make more sense.
Open topics: