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: 15
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.
 
Back
Top