Skip to main content

Gossip

The ISL Gossip Protocol provides broadcast message dissemination across a satellite constellation. It floods messages to all satellites within a specified service area while preventing duplicate delivery.

Use Cases

  • Distributing configuration updates
  • Propagating consensus/blockchain data
  • Broadcasting telemetry to ground-visible satellites

Packet Structure

Gossip Packet (18 + N bytes)
SPP Primary Header (6 bytes)
Version3 bitsPacket version (0)
Type1 bit1 = Telecommand
Sec Hdr Flag1 bit1 = Present
APID11 bitsDestination application
Seq Flags2 bitsSegmentation control
Seq Count14 bitsSequence number
Data Length16 bitsRemaining length − 1
cFE Secondary Header (2 bytes)
Function Code8 bitsCommand code
Checksum8 bitsXOR of entire packet
Gossip Header (10 bytes)
Origin16 bitsNode that created this gossip
Predecessor16 bitsImmediate sender (to avoid echo)
Area Min8 bitsMin satellite index in target area
Area Max8 bitsMax satellite index in target area
Epoch16 bitsSequence number for duplicate detection
Application Payload (variable)

Address Fields

Two addresses serve different purposes:

  • originator: The node that created the gossip. Stays constant as the packet propagates. Used for application-level identification.

  • from_address: The immediate sender. Updated at each hop. Used to avoid echoing the packet back to the sender.

Service Area

The service area defines which satellites should receive and process the gossip. It's specified as a range of satellite IDs within each orbit:

service_area_min = 3
service_area_max = 7

Satellites 3, 4, 5, 6, 7 in each orbit will process the gossip.

Wraparound

When service_area_min > service_area_max, the range wraps around:

service_area_min = 8
service_area_max = 2
constellation_size = 10

Satellites 8, 9, 0, 1, 2 are in the service area.

This handles the case where the ground-visible region crosses the orbit boundary.

Duplicate Detection

Each gossip has a unique epoch identifier. The receiver maintains a cache of recently seen epochs:

The cache uses a circular buffer - old entries are overwritten when the cache is full.

Forwarding Logic

When a gossip packet arrives:

  1. Check if epoch is in the duplicate cache
  2. If duplicate, drop the packet
  3. Otherwise:
    • Add epoch to cache
    • Deliver payload to application
    • Forward to eligible neighbors

Neighbor Eligibility

A neighbor receives the forwarded gossip if:

  1. It's not the sender (to_address != from_address)
  2. It's within the service area (satellite_id in [min, max])

Gossip Handler

The gossip handler processes incoming packets by checking the epoch cache, delivering new messages to the application callback, and forwarding to eligible neighbors.

Processing Flow

recv gossip packet
|
v
is_duplicate(epoch)?
|
+-- yes --> drop
|
+-- no --> app_logic(packet)
|
v
forward_gossip()
|
v
send to eligible neighbors

Configuration

The gossip handler requires:

  • Own address (orbit_id, satellite_id)
  • Torus topology (for neighbor calculation)
  • Application callback for payload processing