SheepShaver/BasiliskII and TAP devices

About SheepShaver, a PPC Mac emulator for Windows, MacOS X, and Linux that can run System 7.5.3 to MacOS 9.0.4.

Moderators: Cat_7, Ronald P. Regensburg, ClockWise

Post Reply
afberendsen
Inquisitive Elf
Posts: 26
Joined: Fri Jul 21, 2017 3:27 am
Location: Berlin, Germany

SheepShaver/BasiliskII and TAP devices

Post by afberendsen »

I cannot find a topic where to add this information. So, please forgive me if this is already recorded somewhere else.
After few hours of investigations, I managed to setup SheepShaver and Basilik II to use network TAPdevices with Windows 10
It is still a crude process that need some more investigations.
In the _prefs file (.sheepshaver_prefs for U*X and SheepShaver_prefs for BeOS and Windows), add the following lines

Code: Select all

ether tap
etherguid {9D4A41C0-6062-482B-858F-A60B829BA835}
etherfakeaddress 525400123458
  • ether tap indicates that the configuration should use TAP
  • etherfakeaddress indicates that the MAC address to be used by the SheepShaver/basiliskII guest. It should *not* contain any colons. It needs to be 12 characters long exactly.
  • etherguid indicates that the TAP device UUID to be used. The biggest problem is the string for etherguid. The only way I managed to find what is the correct value to use was to dig into RegEdit. My TAP devices are all under

    Code: Select all

    Computer\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Network\
On the guest side, I left the TCP configuration to "DHCP". I tested with Mac OS 9 and 8 and it worked very well. Next step is Mac OS 7....
Each guest, as with QEmu, has to use a unique TAP device. So, I created few TAP devices and renamed them to "mytap??????", where ???? are the last 4 characters for the MAC address. Easy to track who is who.
User avatar
Cat_7
Expert User
Posts: 5099
Joined: Fri Feb 13, 2004 8:59 am
Location: Sittard, The Netherlands

Re: SheepShaver/BasiliskII and TAP devices

Post by Cat_7 »

Hi,

This still surprises me. Which Basilisk/SheepShaver builds are you running?
The GUIs included in the latest ones we provide detect the tap devices that have been installed. In my case, I have two that were renamed to: tap0 and tap1. I always have these two inactive tap devices bridged with my default wired ethernet connection.

After selecting tap0 in the Basilisk GUI and tap1 in the SheepShaver GUI and starting both the tap devices are activated. The prefs get updated with the etherguid entry and the unique strings identifying the tap devices are added automatically.
These entries are also cleanly deleted again when I select slirp for networking.

Basilisk and SheepShaver can appletalk to each other in this setup.
No need for the fake mac address over here.

What might be the difference between our situations? Are you attempting to run some other network functionality besides appletalk? I provided you with the details of my tap/openvpn installation earlier.

Best,
Cat_7
afberendsen
Inquisitive Elf
Posts: 26
Joined: Fri Jul 21, 2017 3:27 am
Location: Berlin, Germany

Re: SheepShaver/BasiliskII and TAP devices

Post by afberendsen »

The default MAC address for SheepShaver and BasiliskII, is the same as for QEmu: 52:54:00:12:34:56
With the default set-up, you cannot have more than one Basilisk/SheepShaver/QEmu instance running using TAP since it will conflict with the MAC address and ARP tables will be invalidated.
As for QEmu, using the

Code: Select all

-netdev tap,ifname=mytap3322,id=mynet0 -device sungem,netdev=mynet0,mac=52:54:00:12:33:22 \

to change the internal NIC MAC address, for SheepShaver and BsiliskII, I had to use

Code: Select all

ether tap
etherguid {FA628DBA-0CB5-495B-97CE-2AE513F9E4A4}
etherfakeaddress 525400123384
for the same purpose.
With my set-up, using the plain product configuration, I can have as many instances of those three emulators running, bridged into the real network, with full access in all directions.
All emulators are the latest binary available from emaculation.
Next step is to find a way to use the TAP name instead of the TAP UUID. However, the SheepShaver/BasiliskII paramater is called EtherGUID for some reason....
User avatar
Cat_7
Expert User
Posts: 5099
Joined: Fri Feb 13, 2004 8:59 am
Location: Sittard, The Netherlands

Re: SheepShaver/BasiliskII and TAP devices

Post by Cat_7 »

Hi,

Yes, I understand what you are doing. What I don't understand is that I don't need the fake address to get Basilisk/SheepShaver to use two different tap devices and have an appletalk connection.
The GUIs in your Basilisk and SheepShaver downloads do not list the tap devices when you select an Ethernet interface at the network tab?

For Qemu you are right, a different mac addresses is needed for every tap device.
From the guide:
To allow two qemu instances to “see” each other on the network and also have internet access, you can install a second tap device and bridge both tap devices with the default network connection. You must then also use different mac addresses for each connection. Note that the tap devices should have different names.

-netdev tap,ifname=TapEthernet1,id=network01 -device sungem,netdev=network01,mac=52:54:00:12:34:56
-netdev tap,ifname=TapEthernet2,id=network01 -device sungem,netdev=network01,mac=52:54:00:12:34:66

This might point to this being required for Basilisk/SheepShaver too, but I haven't had issues related to the mac address.
I could be wrong but the tap-enabling etherhelper code might be included in the source and I seem to remember it will create different mac addresses for these two each time they are launched.

Best,
Cat_7
User avatar
adespoton
Forum All-Star
Posts: 3098
Joined: Fri Nov 27, 2009 5:11 am
Location: Emaculation.com
Contact:

Re: SheepShaver/BasiliskII and TAP devices

Post by adespoton »

Cat_7 wrote: Wed Nov 18, 2020 1:35 pm I could be wrong but the tap-enabling etherhelper code might be included in the source and I seem to remember it will create different mac addresses for these two each time they are launched.

Best,
Cat_7
Where is the etherhelper source hosted? I don't see it in the cebix repo.

The ether.cpp code appears to just use whatever MAC ID is presented by the Ethernet device. If two emulators use the same MAC, I'd guess that everything would work fine unless two packets end up with the same ID, in which case there'd be a collision, the checksum would fail, and the packet would be dropped with a reset request. Kind of like running an Ethernet device in promiscuous mode.
afberendsen
Inquisitive Elf
Posts: 26
Joined: Fri Jul 21, 2017 3:27 am
Location: Berlin, Germany

Re: SheepShaver/BasiliskII and TAP devices

Post by afberendsen »

The code in SheepShaver/Bsilisk II do creates a pseudo-random MAC address. In fact, it simply uses the memory leftovers from anything that was there before. In other words, it allocates a 6 byte array and fill in the first 3 bytes. The remaining 3 positions are garbage produced by the normal computer operation. However, there is no control about the address creation. So, you can easily have duplicated MAC addresses. This is why the code author added

Code: Select all

               const char *ether_fake_address;
                ether_fake_address = PrefsFindString("etherfakeaddress");
                if (ether_fake_address && strlen(ether_fake_address) == 12) {
                        char sm[10];
                        strcpy( sm, "0x00" );
                        for( int i=0; i<6; i++ ) {
                                sm[2] = ether_fake_address[i*2];
                                sm[3] = ether_fake_address[i*2+1];
                                ether_addr[i] = (uint8)strtoul(sm,0,0);
                        }
                }
#if 1
                /*
                  If we bridge the underlying ethernet connection and the TAP
                  device altogether, we have to use a fake address.
                 */
                else {
                        ether_addr[0] = 0x52;
                        ether_addr[1] = 0x54;
                        ether_addr[2] = 0x00;
                }
The TAP code also, connects to Win32 using

Code: Select all

        TCHAR dev_path[MAX_PATH];
        _sntprintf(dev_path, lengthof(dev_path),
                         TEXT("\\\\.\\Global\\%s.tap"), dev_name);
This piece of code does not look for the tap device name and use the GUUID. As user, you need to provide the GUUID. The QEmu code is doing a lookup for the GUUID.
User avatar
KnuddlMac
Tinkerer
Posts: 82
Joined: Thu Apr 06, 2017 9:32 am

Re: SheepShaver/BasiliskII and TAP devices

Post by KnuddlMac »

Uoops!


Dear gents,

I started to scratch my head as since of this summer I am happy to run "etherhelper/en0" (w/o quotes) with BAII and SheepShaver. Do I break the rules not going via a bridge plus tap?

Here I am lacking more recent documentation getting Catalina and later even Big Sur to support our AppleTalk needs.
At least on a Late 2013 MBP, WiFi access and AppleTalk work nicely with a distributed FoxPro 2.5 database app.

Any hint appreciated,
-Knuddlmac
User avatar
Cat_7
Expert User
Posts: 5099
Joined: Fri Feb 13, 2004 8:59 am
Location: Sittard, The Netherlands

Re: SheepShaver/BasiliskII and TAP devices

Post by Cat_7 »

Where is the etherhelper source hosted? I don't see it in the cebix repo.
The etherhelper was designed by dsumorok. https://www.github.com/dsumorok/macemu
See discussion here ;-) https://github.com/dsumorok/macemu/wiki/OSX-Networking
It is now also in the kanjitalk755 repo.

Best,
Cat_7
User avatar
Cat_7
Expert User
Posts: 5099
Joined: Fri Feb 13, 2004 8:59 am
Location: Sittard, The Netherlands

Re: SheepShaver/BasiliskII and TAP devices

Post by Cat_7 »

@knuddlemac:

It's hard to keep track of all appletalk configurations for various OSX versions... If you are using the etherhelper/en0 solution you are actually using a package filter solution under the surface. Using that, my normal internet connection gets blocked (in Sierra).
The tap device required could be installed with tuntaposx but that was no longer working in Catalina, so an installation of Tunnelblick with their tap devices was needed. See the forum for some sketchy remarks on how to implement that.
Their solution now no longer seems to work with Big Sur. You can read up on their status and their position on getting Tunnelblick to work in Big Sur on their website. Long story short: they are not going to humor Apple by following Apple's new guidelines.

Bottom line: for now I know of no way to get appletalk running in Big Sur.

Best,
Cat_7
User avatar
KnuddlMac
Tinkerer
Posts: 82
Joined: Thu Apr 06, 2017 9:32 am

Re: SheepShaver/BasiliskII and TAP devices

Post by KnuddlMac »

@Cat_7:

Thank you for your thoughts about Big Sur. I followed the forum link above and also read the scary analysis of the developer version.
Similar to all things in life: By the time you reach your goal, a new one gets defined. - So we will get our next challenge. J

I followed your tutorials and were in contact with a couple of contributors over the course of this year. All information is available, but scattered all over the places. With Catalina SIP and handling of kernel extensions became necessary and thanks to tuntaposx (I think they are also notarized by now?) and Tunnelblick we have what we need.

Maybe for the future on Big Sur another approach containerized or on a virtual machine. - Let's see.


Don't spend all your weekend tinkering like me, you might miss the real world outside! :shock:

Best,
Knuddlmac
User avatar
Cat_7
Expert User
Posts: 5099
Joined: Fri Feb 13, 2004 8:59 am
Location: Sittard, The Netherlands

Re: SheepShaver/BasiliskII and TAP devices

Post by Cat_7 »

Haha, thank you.

But what to do during lock down?
I would have expected much more tinkering from more people now that they are mostly confined to the indoors.

btw: about tinkering: I just installed SheepShaver in a vm running Big Sur and it seems the etherhelper/en0 option works fine there.
But for now I cannot get both SheepShaver and Basilisk use that same configuration.

I guess I'm off to tinker with a motorbike I'm restoring...

Best,
Cat_7
User avatar
adespoton
Forum All-Star
Posts: 3098
Joined: Fri Nov 27, 2009 5:11 am
Location: Emaculation.com
Contact:

Re: SheepShaver/BasiliskII and TAP devices

Post by adespoton »

Cat_7 wrote: Sat Nov 21, 2020 8:56 am Haha, thank you.

But what to do during lock down?
I would have expected much more tinkering from more people now that they are mostly confined to the indoors.

btw: about tinkering: I just installed SheepShaver in a vm running Big Sur and it seems the etherhelper/en0 option works fine there.
But for now I cannot get both SheepShaver and Basilisk use that same configuration.

I guess I'm off to tinker with a motorbike I'm restoring...

Best,
Cat_7
It's funny... I find I've got less time in lockdown; WFH with the rest of the family around leaves less personal time than when everyone has the freedom to go somewhere else.

But if I get a chance, I'll dig into etherhelper and see what's needed to spin up a unique MAC for each client using it -- or if we need a unique etherhelper instance for each emulator.
Post Reply