First post, by bjbdragon
This is my first post here, but I'm on the verge of completing something and would love some input.
I've got an old PC Partner XL 386 SX, not sure exactly what the UART is but I seem to only be able to push 57600 baud. Even with the dial-up like speeds, I really want a way to get some kind of shared drive set up. Anyway, I got EtherSL set up and played around with mTCP. I've heard of EtherDFS before but never had a chance to play with it. A 7k TSR would be just lovely - this machine is already loaded down with tons of TSRs (DriveSpace, SmartDrv, Parallel Zip) so I didn't really want to go the Microsoft Network Client route.
Sadly, after trying for hours getting the 386 to link up with my Linux machine - I do some packet dumps and realize that EtherSL is stripping the Ethernet frames. Of course it is. It's faking an Ethernet packet driver. After a little research I learn that PLIP actually sends Ethernet frames and I could build or buy a parallel port adapter. But I am already using my parallel port for a Zip 100 drive, and I do kind of want to be able to do this over a real dial-up modem someday. In desperation, I tried Microsoft Client but was drowned in terminology, commands, and configuration files I only vaguely understood. After days of fiddling I got nowhere.
Finally, I decide it's more work to dig through the far reaches of the Internet than to hack something up on my own. Looking at EtherDFS documentation again, I notice there's a convenient 38 bytes of "garbage". And there's even a little note about possibly using it to fake UDP/IP headers. It took a few days as I really have never done DOS code, let alone resident stuff. Most of the changes were minor though the offsets were a challenge:
* Input the IP addresses for local machine and remote server
* Construct a UDP/IP header outside of the resident code with my IPs and port 0xEDF5 (EtherType of EtherDFS).
* Implement an IP checksum in the TSR as my packets were just getting filtered
* Modify ethersrv to listen on a normal UDP port just like any other network program (as opposed to the raw socket, which doesn't see UDP/IP packets at all)
* Fix the offsets in ethersrv because now I'm not getting the full frame
* Add yet another IP for "reply to" since gateway zapped my source address
* Find out I've messed up even more odd offsets in the checksum routines.
* Notice I get split up response packets because of my MTU... reduce the framesize in the client.
I started off using this particular version modified by Michael Ortmann:
v0.8.2m [20200603]
- reduced EtherDFS resident footprint
I feel like I'm almost done but I'm running into a few issues. I'm able to do most operations, but when copying a file in Dos Navigator I get an error that the file already exists (with a zero size). Choosing to overwrite or append the file both works just fine and the file transfers at a steady 5KiB/s (40kbps). Trying to wipe a directory with deltree likewise gave me an error telling me I should run ScanDisk. But I seem to be able to do most file operations and md5's and zip -Tv of a 30MB file checks out. Any other EtherDFS users out there who could tell me if it handles Dos Navigator correctly?
Is there anything I might need to be concerned with in this hack, especially regarding data integrity?
Greetings,
bjbdragon