Recipe: Maritime Variable WAN with StormGuard

Use this pattern when WAN capacity changes materially over time (for example satellite backhaul under weather/load effects) and you need bounded adaptive queue tuning.

Fit

  • Best for: one vessel or one high-variance WAN domain represented as one top-level node.

  • Avoid when: you plan to manage dozens/hundreds of targets with StormGuard.

Prerequisites

  1. Complete Quickstart.

  2. Review StormGuard scope and limits.

  3. Confirm source-of-truth behavior (Operating Modes).

Topology Pattern

Use a single top-level node named Ship, with all subnodes beneath it.

Example network.json skeleton:

{
  "Ship": {
    "downloadBandwidthMbps": 1000,
    "uploadBandwidthMbps": 200,
    "children": {
      "Deck_A": {
        "downloadBandwidthMbps": 500,
        "uploadBandwidthMbps": 100
      },
      "Deck_B": {
        "downloadBandwidthMbps": 500,
        "uploadBandwidthMbps": 100
      }
    }
  }
}

StormGuard Configuration

[stormguard]
enabled = true
dry_run = true
targets = ["Ship"]
minimum_download_percentage = 0.5
minimum_upload_percentage = 0.5
log_file = "/var/log/stormguard.csv"

Control Loop Illustration

        flowchart LR
    METRICS[Ship Node Metrics\nthroughput, RTT, loss context]
    SG[StormGuard Evaluator]
    LIMITS[Bounded Queue Limit Adjustments]
    QOE[Observed Link Quality]

    METRICS --> SG
    SG --> LIMITS
    LIMITS --> QOE
    QOE --> METRICS
    

What this shows:

  • StormGuard continuously evaluates current Ship conditions and applies bounded adjustments.

  • Observed quality and saturation behavior feed the next evaluation cycle.

Rollout sequence:

  1. Start with dry_run = true.

  2. Observe multiple busy periods.

  3. Confirm adjustments are bounded and sensible.

  4. Set dry_run = false.

Validation Checklist

  1. StormGuard debug/status pages show Ship as active target.

  2. Effective limits adjust during congestion but respect floor percentages.

  3. RTT/retransmit behavior improves under stress periods.

  4. No naming drift between target names and current hierarchy.

Rollback

  1. Set [stormguard] enabled = false (or back to dry_run = true).

  2. Restart services:

sudo systemctl restart lqosd lqos_scheduler
  1. Verify stable behavior without adaptive changes.