**WIP** Home-grown alternative implementation of Apple Internet Router 3.0
Go to file
Josh Deprez 8cb46a5ace
Add checkmarks
2024-04-17 17:37:50 +10:00
atalk Filter incoming packets 2024-04-17 12:14:33 +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 Add checkmarks 2024-04-17 17:37:50 +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 [WIP] 2024-04-06 14:59:36 +11: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 Implement zone multicast 2024-04-15 20:48:40 +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.
  • 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