== RSPRO *RSPRO*, the *Remote SIM Protocol*, is an osmo-remsim specific, non-standard communications protocol used between the elements of the osmo-remsim system. It is specified in ASN.1 syntax (see `asn1/RSPRO.asn` in the `osmo-remsim` source code) and uses BER (Basic Encoding Rules) on the transport level. === Underlying Transport Layer RSPRO uses TCP as an underlying transport protocol. As TCP doesn't preserve message boundaries, the IPA multiplex is used as intermediate layer between TCP and the BER-encoded RSPRO PDU. For more information about the IPA multiplex, see the related chapter in http://ftp.osmocom.org/docs/latest/osmobts-abis.pdf RSPRO uses the IPA CCM PING/PONG messages for keep-alive and detection of dead/stale connections. The compiled-in defaults transmits one IPA PING every 30s and waits 10s for a response from the peer before declaring the connection as dead. === RSPRO PDU An RsproPDU consists of: * *version* of the protocol (v2 is current) * *tag* specified by the sender, echoed back by the receiver in its response so the server can map responses back to a specific request * *msg* the actual RSPRO Message (union/choice) === RSPRO Operations Each RSPRO Operation typically (unless specified othewise) consists of a Request and Response pair. ==== ConnectBank This is used by `remsim-bankd` to identify itself to `remsim-server` and to establish a logical connection between the two elements. ==== ConnectClient This is used by `remsim-client` to identify itself to `remsim-server` and to establish a logical connection between the two elements. ==== CreateMapping This is used by `remsim-server` to install a slot mapping in a `remsim-bankd`. ==== RemoveMapping This is used by `remsim-server` to remove a slot mapping from a `remsim-bankd`. ==== ConfigClientId This is used by `remsim-server` to dynamically configure a ClientID in a `remsim-client`. This mode is currently not supported yet, each client must have a locally-configured ClientID. ==== ConfigClientBank This is used by `remsim-server` to inform a `remsim-client` about the details (bankd ID, slot number, IP address, TCP port) of a the `remsim-bankd` to which it shall connect. ==== ErrorInd This is a generic error indication that can be sent by any RSRPO entity. ==== SetAtr This is used by `remsim-bankd` to inform the `remsim-client` about the ATR of the card, so that `remsim-client` can replicate that ATR when answering to the reset of the SIM card interface of the phone/modem. ==== TpduModemToCard This is used by `remsim-client` to transfer a command TPDU/APDU from the phone/modem to the SIM card in `remsim-bankd` ==== TpduCardToModem This is used by `remsim-bankd` to transfer a response TPDU/APDU from the SIM card back to the phone/modem at `remsim-client`. ==== ClientSlotStatusInd This is used by `remsim-client` to report the status of a given slot. ==== BankSlotStatusInd This is used by `remsim-bankd` to report the status of a given slot.