RBC_Test_Sim_Core 0.1.0 build 51fd23e
Shared transport-layer plumbing for the ADR-029 Train/IL/CTC RBC simulators
Loading...
Searching...
No Matches
simcore.saf.SafSession Class Reference

Public Member Functions

 __init__ (self, role, id_self, id_peer, kmac, send, recv, *, ety=0, t_connect_ms=0, t_supervision_ms=0, clock=None, rng=None)
 connect (self)
 initiator_start (self)
 handshake_expired (self)
 initiator_on_frame (self, frame)
 build_frame (self, pdu)
 send_pdu (self, pdu)
 recv_pdu (self)
 accept_frame (self, frame)
 supervise (self)
 disconnect (self)

Public Attributes

str role
 id_self
 id_peer
 ety = role, id_self, id_peer, ety
 t_connect_ms
 t_supervision_ms = t_connect_ms, t_supervision_ms
 state = IDLE
int seq_tx = 0
 ksmac = None
 ra = None
 rb = frame[5:13]
tuple seq_rx

Protected Member Functions

 _fail (self, status, detail="")
 _recv_frame (self)
 _connect_deadline (self)
 _check_deadline (self, deadline)
 _connect_initiator (self, deadline)
 _connect_responder (self, deadline)

Protected Attributes

 _kmac
 _send
 _recv = bytes(kmac), send, recv
 _clock = clock or _monotonic_ms
 _rng = rng or os.urandom
int _last_rx_ms = 0
int _handshake_start_ms = 0

Detailed Description

One SaF connection. ``role`` is "initiator" or "responder".

``send(frame: bytes)`` transmits one frame; ``recv() -> bytes`` returns one frame or raises
``TimeoutError``. ``clock()`` returns milliseconds (default: monotonic). ``rng(n)`` returns n random
bytes (default ``os.urandom``); tests inject a fixed one. ``ety`` is the 3-bit ETCS ID type
(Subset-037-2 Table 8: 1=RBC, 2=Engine, ...).

Definition at line 248 of file saf.py.

Constructor & Destructor Documentation

◆ __init__()

simcore.saf.SafSession.__init__ ( self,
role,
id_self,
id_peer,
kmac,
send,
recv,
* ,
ety = 0,
t_connect_ms = 0,
t_supervision_ms = 0,
clock = None,
rng = None )

Definition at line 257 of file saf.py.

Member Function Documentation

◆ _check_deadline()

simcore.saf.SafSession._check_deadline ( self,
deadline )
protected

Definition at line 289 of file saf.py.

◆ _connect_deadline()

simcore.saf.SafSession._connect_deadline ( self)
protected

Definition at line 286 of file saf.py.

◆ _connect_initiator()

simcore.saf.SafSession._connect_initiator ( self,
deadline )
protected

Definition at line 305 of file saf.py.

◆ _connect_responder()

simcore.saf.SafSession._connect_responder ( self,
deadline )
protected

Definition at line 359 of file saf.py.

◆ _fail()

simcore.saf.SafSession._fail ( self,
status,
detail = "" )
protected

Definition at line 276 of file saf.py.

◆ _recv_frame()

simcore.saf.SafSession._recv_frame ( self)
protected

Definition at line 280 of file saf.py.

◆ accept_frame()

simcore.saf.SafSession.accept_frame ( self,
frame )
Verify one already-received Sa-DATA / Sa-DISCONNECT frame and return its PDU (``recv_pdu``'s checks).

Definition at line 415 of file saf.py.

◆ build_frame()

simcore.saf.SafSession.build_frame ( self,
pdu )
The DT frame for ``pdu`` at the current transmit sequence number (does not advance it).

Definition at line 390 of file saf.py.

◆ connect()

simcore.saf.SafSession.connect ( self)
Run AU1-AU2-AU3-AR. Raises ``SafError`` (state returns to IDLE) on any failure or timeout.

Definition at line 294 of file saf.py.

◆ disconnect()

simcore.saf.SafSession.disconnect ( self)
Send an unauthenticated Sa-DISCONNECT (reason 0, sub-reason 0) and go to IDLE.

Definition at line 449 of file saf.py.

◆ handshake_expired()

simcore.saf.SafSession.handshake_expired ( self)
True while a handshake is in progress and has run longer than ``t_connect_ms`` (0 = never).

Definition at line 326 of file saf.py.

◆ initiator_on_frame()

simcore.saf.SafSession.initiator_on_frame ( self,
frame )
AU2 -> returns AU3 (waits for AR); AR -> returns None (now DATA). Raises ``SafError`` (to IDLE).

Definition at line 331 of file saf.py.

◆ initiator_start()

simcore.saf.SafSession.initiator_start ( self)
Begin a handshake: returns AU1 to send; the session waits for AU2.

Definition at line 317 of file saf.py.

◆ recv_pdu()

simcore.saf.SafSession.recv_pdu ( self)
Receive one authenticated PDU. Any protection failure returns the session to IDLE.

Definition at line 405 of file saf.py.

◆ send_pdu()

simcore.saf.SafSession.send_pdu ( self,
pdu )

Definition at line 400 of file saf.py.

◆ supervise()

simcore.saf.SafSession.supervise ( self)
Call periodically: drop the session when nothing valid arrived within ``t_supervision_ms``.

Definition at line 442 of file saf.py.

Member Data Documentation

◆ _clock

simcore.saf.SafSession._clock = clock or _monotonic_ms
protected

Definition at line 266 of file saf.py.

◆ _handshake_start_ms

simcore.saf.SafSession._handshake_start_ms = 0
protected

Definition at line 273 of file saf.py.

◆ _kmac

simcore.saf.SafSession._kmac
protected

Definition at line 264 of file saf.py.

◆ _last_rx_ms

simcore.saf.SafSession._last_rx_ms = 0
protected

Definition at line 272 of file saf.py.

◆ _recv

simcore.saf.SafSession._recv = bytes(kmac), send, recv
protected

Definition at line 264 of file saf.py.

◆ _rng

simcore.saf.SafSession._rng = rng or os.urandom
protected

Definition at line 267 of file saf.py.

◆ _send

simcore.saf.SafSession._send
protected

Definition at line 264 of file saf.py.

◆ ety

simcore.saf.SafSession.ety = role, id_self, id_peer, ety

Definition at line 263 of file saf.py.

◆ id_peer

simcore.saf.SafSession.id_peer

Definition at line 263 of file saf.py.

◆ id_self

simcore.saf.SafSession.id_self

Definition at line 263 of file saf.py.

◆ ksmac

simcore.saf.SafSession.ksmac = None

Definition at line 270 of file saf.py.

◆ ra

simcore.saf.SafSession.ra = None

Definition at line 271 of file saf.py.

◆ rb

simcore.saf.SafSession.rb = frame[5:13]

Definition at line 338 of file saf.py.

◆ role

str simcore.saf.SafSession.role

Definition at line 263 of file saf.py.

◆ seq_rx

tuple simcore.saf.SafSession.seq_rx

Definition at line 436 of file saf.py.

◆ seq_tx

int simcore.saf.SafSession.seq_tx = 0

Definition at line 269 of file saf.py.

◆ state

simcore.saf.SafSession.state = IDLE

Definition at line 268 of file saf.py.

◆ t_connect_ms

simcore.saf.SafSession.t_connect_ms

Definition at line 265 of file saf.py.

◆ t_supervision_ms

simcore.saf.SafSession.t_supervision_ms = t_connect_ms, t_supervision_ms

Definition at line 265 of file saf.py.


The documentation for this class was generated from the following file: