99 lines
3.3 KiB
ReStructuredText
99 lines
3.3 KiB
ReStructuredText
.. only:: comment
|
|
|
|
© Crown-owned copyright 2025, Defence Science and Technology Laboratory UK
|
|
|
|
.. _internal_frame_processing:
|
|
|
|
Internal Frame Processing
|
|
=========================
|
|
|
|
Inbound
|
|
-------
|
|
|
|
At the NIC
|
|
^^^^^^^^^^
|
|
When a Frame is received on the Node's NIC:
|
|
|
|
- The NIC checks if it is enabled. If so, it will process the Frame.
|
|
- The Frame's received timestamp is set.
|
|
- The Frame is captured by the NIC's PacketCapture if configured.
|
|
- The NIC decrements the IP Packet's TTL by 1.
|
|
- The NIC calls the Node's ``receive_frame`` method, passing itself as the receiving NIC and the Frame.
|
|
|
|
|
|
At the Node
|
|
^^^^^^^^^^^
|
|
|
|
When ``receive_frame`` is called on the Node:
|
|
|
|
- The source IP address is added to the ARP cache if not already present.
|
|
- The Frame's protocol is checked:
|
|
- If ARP or ICMP, the Frame is passed to that protocol's handler method.
|
|
- Otherwise it is passed to the SessionManager's ``receive_frame`` method.
|
|
|
|
At the SessionManager
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
When ``receive_frame`` is called on the SessionManager:
|
|
|
|
- It extracts the key session details from the Frame:
|
|
- Protocol (TCP, UDP, etc)
|
|
- Source IP
|
|
- Destination IP
|
|
- Source Port
|
|
- Destination Port
|
|
- It checks if an existing Session matches these details.
|
|
- If no match, a new Session is created to represent this exchange.
|
|
- The payload and new/existing Session ID are passed to the SoftwareManager's ``receive_payload_from_session_manager`` method.
|
|
|
|
At the SoftwareManager
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Inside ``receive_payload_from_session_manager``:
|
|
|
|
- The SoftwareManager checks its port/protocol mapping to find which Service or Application is listening on the destination port and protocol.
|
|
- The payload and Session ID are forwarded to that receiver Service/Application instance via their ``receive`` method.
|
|
- The Service/Application can then process the payload as needed.
|
|
|
|
Outbound
|
|
--------
|
|
|
|
At the Service/Application
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
When a Service or Application needs to send a payload:
|
|
|
|
- It calls the SoftwareManager's ``send_payload_to_session_manager`` method.
|
|
- Passes the payload, and either destination IP and destination port for new payloads, or session id for existing sessions.
|
|
|
|
At the SoftwareManager
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
Inside ``send_payload_to_session_manager``:
|
|
|
|
- The SoftwareManager forwards the payload and details through to to the SessionManager's ``receive_payload_from_software_manager`` method.
|
|
|
|
At the SessionManager
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
When ``receive_payload_from_software_manager`` is called:
|
|
|
|
- If a Session ID was provided, it looks up the Session.
|
|
- Gets the destination MAC address by checking the ARP cache.
|
|
- If no Session ID was provided, the destination Port, IP address and Mac Address are used along with the outbound IP Address and Mac Address to create a new Session.
|
|
- Calls `send_payload_to_nic`` to construct and send the Frame.
|
|
|
|
When ``send_payload_to_nic`` is called:
|
|
|
|
- It constructs a new Frame with the payload, using the source NIC's MAC, source IP, destination MAC, etc.
|
|
- The outbound NIC is looked up via the ARP cache based on destination IP.
|
|
- The constructed Frame is passed to the outbound NIC's ``send_frame`` method.
|
|
|
|
At the NIC
|
|
^^^^^^^^^^
|
|
|
|
When ``send_frame`` is called:
|
|
|
|
- The NIC checks if it is enabled before sending.
|
|
- If enabled, it sends the Frame out to the connected Link.
|