Skip to content

JackBridge v0.2.0 — multicast-pin stack + fork-based jack2

Latest

Choose a tag to compare

@sastraxi sastraxi released this 28 Jun 22:58

First release with the netJACK2 multicast-interface pin in place. Required for the direct-cable pi-stomp setup.

Install

Download and install both .pkg files, jack2 first:

  1. jack2-1.9.22+sastraxi.5.pkg — JACK2 fork we depend on. Stock jackaudio/jack2 1.9.22 is missing the multicast-interface pin; without this fork, netJACK2's discovery times out on hosts with both wifi and a direct-cable NIC. Installs to /usr/local.
  2. JackBridge-0.2.0.pkg — the HAL driver, the JackBridged daemon, the LaunchAgents, the route watcher, and the jackd-launch wrapper. Double-click and run. Trust the unsigned package (Right-click > Open) on first install.

Re-running the same JackBridge-*.pkg is safe — the postinstall preserves a hand-edited config.plist and only re-bootstraps the LaunchAgents.

What's in this release

jack2 fork (3 commits on top of v1.9.22 + WAF backport from 1.9.23)

  • 3a2f2488 — netadapter PI controller integrator reset on ringbuffer reset
  • 719d833aIP_ADD_MEMBERSHIP / IP_BOUND_IF pin on the master's multicast group join via JACK_NETJACK_MULTICAST_IF
  • b3bfc408 — mirror pin on the slave's outgoing multicast sendto()

Built with sastraxi/jack2/build-macos-pkg.sh. Source at https://github.com/sastraxi/jack2.

JackBridge (v0.1.x → v0.2.0)

  • jackd-launch sources JACK_NETJACK_MULTICAST_IF from /var/run/jackbridge-route.iface, so netmanager's setsockopt pin gets the right interface name without hardcoding in the LaunchAgent plist.
  • jackbridge-route-watcher actively manages the two LaunchAgents (bootout+disable on disconnect, enable+bootstrap on wired) instead of relying on KeepAlive+PathState. Pairs bootout's SIGTERM with an explicit jackd pkill so the next install doesn't fail on "text file busy".
  • jb-is-wifi-iface: extracted single source of truth for wifi classification; both jb-detect-net-iface and the route watcher source it.
  • LaunchAgent plists: KeepAlive=true, ThrottleInterval=2, WatchPaths on config.plist. RunAtLoad intentionally absent.
  • pi/bin/jackbridge-pi-up: reads /run/jackbridge.iface (set by jackbridge-pin-route's ExecStartPre) as the source of truth for the iface name. Fixes the hardcoded eth0 bug on boards with multiple wired NICs. Falls back to $JACKBRIDGE_IFACE then eth0.
  • pi/bin/jackbridge-pi-down: iterates all netadapter* clients (not just netadapter), so stale instances from failed prior runs don't pile up and choke the audio thread.
  • installer/build-pkg.sh: ARCHS env var to build a single-arch dev .pkg when the host's JACK_PREFIX is arm64-only. Universal release builds need a universal libjack at JACK_PREFIX.
  • jack-rebuild-mac.sh: root-level dev script — rebuild jack2 from the fork and reinstall over the host's /usr/local install.

v0.1.x worked on single-NIC hosts by accident; v0.2.0+ is required for the direct-cable setup that drives the pi-stomp use case.