**WIP** Home-grown alternative implementation of Apple Internet Router 3.0
Find a file
2024-04-24 12:18:22 +10:00
atalk Refactor that might not make sense 2024-04-23 09:50:17 +10:00
aurp Add fuzz test and fix panics found so far 2024-04-24 12:18:22 +10:00
router Add receiver side reconnect 2024-04-23 17:05:06 +10:00
status Fix status content 2024-04-23 13:44:33 +10:00
.gitignore Skip peers that don't resolve 2024-04-19 22:07:48 +10:00
go.mod WIP AppleTalk 2024-04-05 14:07:16 +11:00
go.sum WIP AppleTalk 2024-04-05 14:07:16 +11:00
jrouter.yaml Add peer list function 2024-04-21 15:14:16 +10:00
LICENSE Add LICENSE 2024-03-18 09:44:22 +11:00
main.go SetTraceback("all") 2024-04-24 09:33:15 +10:00
README.md Fix ZIP ATP replies 2024-04-19 12:21:33 +10:00

jrouter

Home-grown alternative implementation of Apple Internet Router 3.0

Goals

  • Full compatibility with Apple Internet Router 3.0
  • Function on modern operating systems
  • EtherTalk support

TashTalk could be a stretch goal, if I can acquire one!

Caveats

Things I plan to fix Real Soon Now:

  • Fixed It currently listens to all AppleTalk and AARP traffic on the EtherTalk port. This might not play well with other AppleTalk software, e.g. netatalk.
  • Fixed Also it currently uses the default Ethernet address for the interface for sending packets. I plan to add the ability to configure a different address. You can now configure a different Ethernet address for the EtherTalk interface. I haven't tested it with netatalk or tashrouter on the same host, but I think using a distinct Ethernet address would help them coexist.
  • It doesn't do any of the required packet splitting to keep packets under the AppleTalk size limits. In particular ZIP GetZoneList Replies are incorrect when the zone list would exceed the limit. GetZoneList is now fixed, but various others need fixing.
  • It logs a lot and has no other monitoring or observability capability. I plan to add a Prometheus metrics endpoint and at least add log levels / verbosity flag.
  • The AURP implementation is strictly incomplete, and lost connections with configured peers aren't re-established after some backoff. This won't be too difficult.

Things I plan to fix At Some Point:

  • For expediency I made it act as a seed router. At some point I might add "soft seed" functionality.

How to use

WARNING: It Barely Works™

First, set up a jrouter.yaml (use the one in this repo as an example).

TODO: explain the configuration file

Building and running:

sudo apt install libpcap-dev
go install gitea.drjosh.dev/josh/jrouter@latest
sudo setcap 'CAP_NET_BIND_SERVICE=ep CAP_NET_RAW=ep' ~/go/bin/jrouter
~/go/bin/jrouter
  • NET_BIND_SERVICE is needed to bind UDP port 387 (for talking between AIRs)
  • NET_RAW is needed for EtherTalk

TODO: instructions for non-Linux machines