**WIP** Home-grown alternative implementation of Apple Internet Router 3.0
Go to file
Josh Deprez c81c6002f8
Split ZIP replies properly
2024-04-19 14:09:01 +10:00
atalk Split ZIP replies properly 2024-04-19 14:09:01 +10:00
aurp More log 2024-04-13 15:27:41 +10:00
.gitignore Initial commit 2024-03-10 10:58:53 +11:00
LICENSE Add LICENSE 2024-03-18 09:44:22 +11:00
README.md Fix ZIP ATP replies 2024-04-19 12:21:33 +10:00
aarp.go Less logging 2024-04-14 13:32:49 +10:00
aep.go handle more ZIP 2024-04-14 18:29:29 +10:00
config.go Filter incoming packets 2024-04-17 12:14:33 +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 ethernet_addr comment to config 2024-04-17 17:39:41 +10:00
main.go Filter incoming packets 2024-04-17 12:14:33 +10:00
nbp.go Implement zone multicast 2024-04-15 20:48:40 +10:00
nbp_aurp.go Implement zone multicast 2024-04-15 20:48:40 +10:00
peer.go handle more ZIP 2024-04-14 18:29:29 +10:00
route.go remove route & zone ageing 2024-04-15 17:08:53 +10:00
rtmp.go Size better 2024-04-15 10:16:57 +10:00
zip.go Split ZIP replies properly 2024-04-19 14:09:01 +10:00
zones.go Add BrRq-FwdReq translation 2024-04-15 18:08:45 +10:00

README.md

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