I have netatalk providing the NBP, and use a home grown program to do the MacIP gateway translation between DDP over ethenet using AF_APPLETALK/SOCK_DGRAM sockets, and IP using a child process which I communicate with using SLIP (over a pair of interprocess pipes, not a real serial line).
The child SLIP process can either just be a simple slattach program, or in my case, I use a SLIP to PPP translator and which then hooks into a pseudo-terminal using pppd to get the packets into the heart of the NetBSD IP router.