|
|
|
@ -4,22 +4,23 @@ osmo-remsim - Osmocom remote SIM software suite
|
|
|
|
|
This software suite is a work in progress. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remsim-client |
|
|
|
|
------------- |
|
|
|
|
osmo-remsim-client |
|
|
|
|
------------------ |
|
|
|
|
|
|
|
|
|
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 remsim-client for further processing of the |
|
|
|
|
from the phone/modem to osmo-remsim-client for further processing of the |
|
|
|
|
TPDUs associated to the given APDU transfer. |
|
|
|
|
|
|
|
|
|
remsim-client connects via a RSPRO control connection to remsim-server |
|
|
|
|
at startup and registers itself. It will receive configuration data |
|
|
|
|
such as the remsim-bankd IP+Port and the ClientId from remsim-server. |
|
|
|
|
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, remsim-client will establish a RSPRO |
|
|
|
|
data connection to the remsim-bankd IP:Port. |
|
|
|
|
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 |
|
|
|
@ -27,22 +28,22 @@ blocking I/O on the TCP/RSPRO side. This simplifies the code compared
|
|
|
|
|
to a more complex async implementation. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
remsim-bankd |
|
|
|
|
------------ |
|
|
|
|
osmo-remsim-bankd |
|
|
|
|
----------------- |
|
|
|
|
|
|
|
|
|
The remsim-bankd (SIM Bank Daemon) manages one given SIM bank. The |
|
|
|
|
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. |
|
|
|
|
|
|
|
|
|
remsim-bankd initially connects via a RSPRO control connection to |
|
|
|
|
remsim-server at startup, and will in turn receive a set of initial |
|
|
|
|
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 remsim-server at any given |
|
|
|
|
the SIM bank. Mappings can be updated by osmo-remsim-server at any given |
|
|
|
|
point in time. |
|
|
|
|
|
|
|
|
|
remsim-bankd implements a RSPRO server, where it listens to connections |
|
|
|
|
from remsim-clients. |
|
|
|
|
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, |
|
|
|
@ -62,10 +63,10 @@ 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 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. |
|
|
|
|
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: |
|
|
|
|
* INIT (just started) |
|
|
|
|