-
Notifications
You must be signed in to change notification settings - Fork 0
Data Plane
The data plane is the runtime path that turns transport input into tagged and deduplicated NMEA output.
For secure station ingress details, see UDPSEC and nmea_sproxy.
Event-level processing:
transport ingress
-> IngressEvent
-> RoutingState snapshot capture
-> source_id matching
-> matched target IDs, or legacy broadcast
Sentence-level processing for that event:
sentence extraction and TAG parsing
-> multipart assembly
-> global or target-scoped deduplication
-> TAG output
-> UDP egress
- Transport ingress receives plain UDP or authenticated UDPSEC traffic.
- The adapter builds an
IngressEventwith an internalsource_id, a stableassembler_key, optional TAGsaliasing data, the remote IP when available, and the raw line. -
forward_loopcaptures the currentRoutingStatesnapshot once for theIngressEvent. - If routing is enabled in that snapshot, AISMixer matches
IngressEvent.source_idonce and records the matched target IDs for the event. If routing is disabled, the event stays in legacy broadcast mode. - AISMixer extracts AIS NMEA
!AIVDM/!AIVDOsentences and reads any immediately preceding TAG block. See TAG Handling. - TAG
s,c, andgvalues are considered for output metadata. - Multipart sentences are assembled before output. See Multipart NMEA Assembly.
- Deduplication is applied globally in legacy mode, or per matched target ID in routing mode.
- AISMixer writes its output TAG block and sends the result to UDP egress targets.
Legacy broadcast mode is active when no compiled routing table is installed.
In this mode, deduplication is global. Each accepted output sentence is sent to every configured UDP forwarder, including forwarders without an id.
Routing mode is active when a valid routing table is installed at startup or through runtime control.
In this mode, AISMixer matches IngressEvent.source_id against logical source zones once per event. Matching routes produce an ordered set of target IDs, and output is sent only to those named targets.
Deduplication is target-scoped in routing mode. It uses the matched target IDs from the event-level routing decision. The same sentence may be sent once to udp:aishub and once to udp:local_debug, while overlapping routes to the same target produce only one send during the deduplication TTL.
forward_loop reads one immutable routing snapshot for each IngressEvent. It does not perform a new RoutingState lookup for every extracted sentence. Runtime updates affect events pulled after the replacement, not an event that already captured a snapshot.
Multipart assembly can span ingress events from the same assembler identity. For plain UDP, the assembler identity is based on the observed source IP and port. For UDPSEC, it follows the secure ingress identity supplied by the secure adapter.
When fragments complete across multiple IngressEvent objects, the assembled output uses the routing snapshot and matched target IDs captured for the event that supplies the completing fragment.
The assembler key is not TAG g. TAG g is ingress/output metadata for grouped NMEA output. Assembly uses NMEA fragment fields together with the ingress assembler identity.
Incomplete or malformed multipart input is not forwarded as a complete message. Expired fragment state is cleaned by the assembler timeout.
Current egress is UDP only. Named UDP forwarders become routeable target IDs such as udp:aishub; unnamed forwarders are usable in legacy broadcast mode but cannot be referenced by routes.