Fun with userspace AppleTalk

I've been really wanting to write software to speak AppleTalk to my various LocalTalk (and sometimes EtherTalk) systems. I've found the C API for Netatalk isn't super pleasant, at least coming from the Rust world with async/await everywhere.

This is a little milestone from my own fully userspace Rust AppleTalk stack that provides a no_std (i.e suitable for embedding on micros) parser and encoder for every AppleTalk packet type, and a Linux/Mac/Windows stack that uses raw sockets so has no reliance on the kernel itself to build on top of it. No code reuse from Netatalk either, all built with Rust + Tokio in mind. It exposes high level async APIs with Tokio for all of the protocols as well, so to look up a LaserWriter and print to it via NBP is trivial.

Not meant to be a super serious project, but the eventual goal is to have most all the usual functionality that Netatalk provides working, including AFP so I can transfer files easily from my Linux machine to any of the older Macs. Thought I'd post it here in case there was any other Rust interest :).

Picture is from my userspace stack printing the Rust logo from my Linux tablet, with LLAP, NBP, DDP, ATP and PAP all working in harmony :)
 

Attachments

  • IMG_2307.JPEG
    IMG_2307.JPEG
    556.6 KB · Views: 16
Wow! I‘d like to see more! 😃 I‘ve also been writing an Embedded/Userspace AppleTalk stack for several years now but progress has slowed down substantially in recent times.
 
If you're up for staring at Rust code I'd love more eyes on it. I hope to publish it soon on GitHub once the API is a little less crazy hah. But so far it appears to be working pretty well - I've got a handful of external demo programs made for it, like an AEP echo'er, NBP lookups, the above PAP printer, and AFP is at the point where it tries to start manipulating files.

Very much a toy project of course. My day job is writing userspace network stuff so I've enjoyed trying out some new concepts here.
 
Ooh, this is Relevant To My Interests. I tried something similar a while back, creating a collection of programs that together amounted to a userspace inetd for AppleTalk, but got stuck somewhere in PAP-land... I'm interested in having a peek at the source whenever you release it.
 
Ooh, this is Relevant To My Interests. I tried something similar a while back, creating a collection of programs that together amounted to a userspace inetd for AppleTalk, but got stuck somewhere in PAP-land... I'm interested in having a peek at the source whenever you release it.
Hah I think you can guess why I was excited to get that Pi hat then. And of course! Sounds like our goals are/were pretty much the same. I’ve found a few LocalTalk quirks I’m sure I’ll need to ask you about too
 
OK, just to remind me about Netatalk. Let's say I have my MacMini Raspberry PI 3 WIFI and my PowerBook 1400c (+AirTalk). Is Netatalk the right way to get me to:

  1. PB1400c <---[LocalTalkCable]---> Serial: PI3 ?
  2. PB1400c <--->AirTalk )))) (((((Wifi <---> PI3?
  3. PB1400c <--->AirTalk )))) (((((Wifi <---> Mac Mini?
  4. PB1400c <---[LocalTalkCable]---> Serial: PI3 {<--->miniVMac} ?
  5. PB1400c <--->AirTalk )))) (((((Wifi <---> Mac Mini? {<--->miniVMac} ?
?
 
OK, just to remind me about Netatalk. Let's say I have my MacMini Raspberry PI 3 WIFI and my PowerBook 1400c (+AirTalk). Is Netatalk the right way to get me to:
you probably want tashrouter
netatalk is mostly used for AFP services
 
Back
Top