• 1.1.1 7bf816479c

    1.1.1
    All checks were successful
    Release / Checksum and publish release (push) Successful in 3s
    CI / PHP lint (push) Successful in 1m36s
    Release / Verify tag and changelog (push) Successful in 3s
    Release / PHP lint (push) Successful in 1m34s
    Stable

    eric released this 2026-10-22 17:22:19 -07:00 | 14 commits to main since this release

    Fixed

    • The lock file is opened close-on-exec. Before, the dhclient that interface_configure() starts on MASTER inherited the descriptor and kept the lock held for as long as it ran. Later CARP events then blocked indefinitely (so demotion never took WAN down), and every --reconcile backed off silently (#11).

    Documentation

    • Installation is one ordered list covering every step: enable the interface, download and verify, install, configure, dry-run, check the configd action, schedule the reconcile cron job, and test a failover. The pinned-release example now uses 1.1.1, since 1.0.0 has no actions_wancarp.conf and its download failed (#13).
    • Corrected stale README details: MASTER's "already up" check also requires an address or a running dhclient, the reconcile drift message reads interface/route state had drifted, and the API list includes exit_on_bootup() and system_routing_configure() (#13).
    Downloads
  • 1.1.0 fe5ffa3d09

    1.1.0
    All checks were successful
    Release / Verify tag and changelog (push) Successful in 3s
    Release / PHP lint (push) Successful in 1m36s
    Release / Checksum and publish release (push) Successful in 3s
    CI / PHP lint (push) Successful in 1m34s
    Pre-release

    Ghost released this 2026-10-20 10:00:25 -07:00 | 17 commits to main since this release

    ❗ ❗ ❗ Superseded by 1.1.1, which fixes the lock being held by dhclient (#11). ❗ ❗ ❗

    I do not recommend using this release.

    Added

    • --reconcile mode, which re-applies the node's current CARP role. OPNsense's rc.linkup re-runs interface_configure() on LINK_UP for any interface enabled on disk, which brings the BACKUP's WAN back up with no CARP event to undo it. Reconcile is quiet unless it changes something or errors, skips during boot, and backs off while an event run holds the lock (#3, #4).
    • actions_wancarp.conf, a configd action so reconcile can be scheduled from System → Settings → Cron. It is published as a release asset and listed in 10-wancarp.sha256 (#4).
    • $carp_vhids setting to limit which VHIDs count towards the node's role (#3).
    • Dry-run preflight flags any CARP VHID on an interface in $iface_aliases, and checks for system_routing_configure() when remove_backup_route is set (#5, #6).
    • CI lints the script on every push. Pushing a release tag now builds the release itself (notes from this file, assets and checksum attached); it no longer needs to be created in the UI first. Lint runs on PHP 8.5, the version OPNsense ships (#12).

    Changed

    • The script now acts on the node's overall CARP role rather than the type of the event that woke it: any counted VHID in BACKUP → BACKUP, all MASTER → MASTER, otherwise no change. Runs are serialized with a lock so concurrent per-VHID events can't interleave (#3).
    • The remove_backup_route repoint is now two-way and state-driven. MASTER restores the default route if it still points at $lan_vip (via system_routing_configure()); BACKUP decides from the live default route, so a WAN that was already down still gets repointed, and --reconcile enforces both directions. A failed route delete now stops the route add (#6).

    Fixed

    • The END banner reports result=partial when an action fails, instead of result=ok (#7).
    • MASTER no longer skips an interface that is UP but unconfigured. It is only treated as already up if it also has a non-link-local address or a live dhclient (#8).
    • Install curl commands use -f, so an HTTP error exits non-zero instead of writing the error page over the hook or action file (#9).
    • A null $config on a live run now logs a clear message instead of raising a TypeError (#10).

    Documentation

    • Verified compatibility with OPNsense 26.7 / FreeBSD 15.1 and documented why the UP check must not match the new LOWER_UP flag.
    • Replaced clog (removed in 21.x) with opnsense-log, and corrected the PHP error log path.
    • Corrected the claim that HA config sync carries the per-interface enable flag; it doesn't, so the prerequisite must be set on each node.
    • Documented that toggled interfaces must not carry CARP VIPs (#5).
    Downloads
  • 1.0.0 e98c7163eb

    1.0.0
    All checks were successful
    release / checksum (release) Successful in 4s
    Stable

    eric released this 2026-07-02 11:34:07 -07:00 | 30 commits to main since this release

    1.0.0

    • Updated README and Installation instructions to use chmod 0700 instead of chmod a+x
    • Created runner workflow to generate SHA256 hashes when a release is published so you can validate script integrity when pulling to your firewalls
      • To validate download 10-wancarp and 10-wancarp.sha256 to the same location and then run sha256sum -c 10-wancarp.sha256
    Downloads