Jump to content

Mac App Store access with NullEthernet.kext


RehabMan
 Share

136 posts in this topic

Recommended Posts

If you don't have working "built-in" Ethernet (or your computer has no Ethernet at all) and do not have a supported PCIe WiFi card, then chances are you're using USB WiFi for internet access. The problem, of course, is that you have no access to the Mac App Store in that scenario.

On a whim, I created NullEthernet.kext to solve this problem. It is a "fake" Ethernet kext that will never actually work. That is, it will not ever provide network access, but it can be made to look "built-in" and solves the issue of Mac App Store access.

For Source/README/download, see here: https://github.com/RehabMan/OS-X-Null-Ethernet

It is now confirmed working in at least two laptops where there is no Ethernet port, and the WiFi is unsupported (and not replaceable).

Update 2014-01-23

A new build is up. This version can be attached to a PCIe device as well as a fake ACPI device (as in the first version). This allows you to load the driver against an actual non-working PCIe device if that is your scenario. It also avoids a DSDT patch as all customization is done in an injector kext by modifying its Info.plist for your device. The injector/PCIe technique is not relevant in the scenario where you have no Ethernet device at all, for that case you must use the fake ACPI device. See the README.md for details.


Update 2016-12-16

A new build is up. This version can be installed without any tweaks to ACPI, and even without a PCI device to attach to. Simply i install NullEthernetForce.kext along with NullEthernet.kext. Read the README for further details.

 

NOT WORKING YET.  REMOVED.

  • Like 19
Link to comment
Share on other sites

hi..

any other way to make the kext load ,instead patch DSDT.'cause I do not use DSDT...

c.frio

It is easy to patch your DSDT with MaciASL. In addition to loading the driver, you need the DSDT to inject properties to make the Ethernet look "built-in."

Link to comment
Share on other sites

hi..

tks RehabMan...I'll try on desktop as I use only wifi dongle, the computer far away from router

c.frio

FYI: It would be possible to use an SSDT:

 

DefinitionBlock("ssdt.aml", "SSDT", 2, "RehabMan", "RMNE", 0x00001000)
{
    Device (RMNE)
    {
        Name (_ADR, Zero)
        // The NullEthernet kext matches on this HID
        Name (_HID, "NULE0000")
        // This is the MAC address returned by the kext. Modify if necessary.
        Name (MAC, Buffer() { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 })
        Method (_DSM, 4, NotSerialized)
        {
            If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
            Return (Package()
            {
                "built-in", Buffer() { 0x00 },
                "IOName", "ethernet",
                "name", Buffer() { "ethernet" },
                "model", Buffer() { "RM-NullEthernet-1001" },
                "device_type", Buffer() { "ethernet" },
            })
        }
    }
}
Link to comment
Share on other sites

Thanks Rehabman

 

Is it also possible to build a kext that patches on-the fly like Clover's KextToPatch?

I'm not sure I understand the question. This is a kext you install, it is not a kext patch.

 

I get the question now, but it is off-topic for here. Question is: Can you do Clover style kext patching from within a kext instead of in the bootloader? Answer: No. The potential kexts you would want to patch are already running by the time a kext starts. Kext patching must be done on disk or in the code responsible for loading the kext (eg. bootloader).

Link to comment
Share on other sites

FYI: It would be possible to use an SSDT:

 

DefinitionBlock("ssdt.aml", "SSDT", 2, "RehabMan", "RMNE", 0x00001000)
{
    Device (RMNE)
    {
        Name (_ADR, Zero)
        // The NullEthernet kext matches on this HID
        Name (_HID, "NULE0000")
        // This is the MAC address returned by the kext. Modify if necessary.
        Name (MAC, Buffer() { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66 })
        Method (_DSM, 4, NotSerialized)
        {
            If (LEqual (Arg2, Zero)) { Return (Buffer() { 0x03 } ) }
            Return (Package()
            {
                "built-in", Buffer() { 0x00 },
                "IOName", "ethernet",
                "name", Buffer() { "ethernet" },
                "model", Buffer() { "RM-NullEthernet-1001" },
                "device_type", Buffer() { "ethernet" },
            })
        }
    }
}

Hi Reahbman..

 

thank you..if I go, I prefer to play with DSDT...as I don't use SSDTs either.... ;)

Link to comment
Share on other sites

Hi Reahbman..

 

thank you..if I go, I prefer to play with DSDT...as I don't use SSDTs either.... ;)

OK...

 

If you have a non-working PCIe Ethernet, you can also use the second technique (injector onto PCIe device). See README for more information.

Link to comment
Share on other sites

Hi RehabMan,

 

i've added references and links on the guide for the surface pro,

the only extra thing i had to do was looking for a proper smbios serial via clover configurator and apple support site.

 

a question, do you suggest to always update the kext to the latest version even if icloud access is actually working?

thanks

Link to comment
Share on other sites

Hi RehabMan,

 

i've added references and links on the guide for the surface pro,

the only extra thing i had to do was looking for a proper smbios serial via clover configurator and apple support site.

 

a question, do you suggest to always update the kext to the latest version even if icloud access is actually working?

thanks

 

I think I'm done with updates for a while on the kext.  Unless someone reports a bug.  I had it on my list to allow it to attach to a PCI device, but before I did that, I wanted to make sure it was working (having no way to test it for myself)... thus the 0.1.0 version followed shortly by 1.0.0 with a few extra features.  You should be able to update without issue.

 

The only feature/idea I have on my list is a random MAC generator, stored in nvram to be re-used on subsequent boots (override with fixed MAC would still be supported as we have now).  But I think I'm going to wait and see how important having a unique MAC turns out to be before putting forth the effort.

Link to comment
Share on other sites

  • 2 weeks later...

@RehabMan,

 

Would you kindly review my report regarding App Store verification problem in the following link:

http://www.insanelymac.com/forum/topic/273504-app-store-your-device-or-computer-could-not-be-verified/page-4

 

Do you think your Null Ethernet kext has good chance may work in my situation?

If your issue is that you have no working built-in Ethernet (only USB WiFi), this solution should work.

Link to comment
Share on other sites

Thanks for your reply. 

In the same computer, ML 10.8.5 worked with the airport card without a hitch. In Mavericks, weird stuff happened. I tried importing my ML Networking Interface into Mavericks with proper terminal commands from eep. It installed correctly but it shuts off Wi-Fi function. In Mavericks, I can only have either Wi-Fi or Marvell Yukon Lan. If Both kexts are loaded, only LAN works and Wi-Fi showed up in network setting and I could not turn it on through network setting. Going through my DSDT.aml, I could not locate the Airpot Atheros 9380 at all. Yet, it clearly displayed in the IORegistry. I was hoping that if it showed up in DSDT.aml, maybe some patch might work. WOuld changing SMBios to MacPro 3.1 make a difference? 

 

If I try your NullEthernet Kext with SSDT, if it does not work, can I just uninstall the kext and delete the SSDT and back to square one? I am desperate to try anything as long as it does not give me serious KP that I cannot fix it myself. 

  • Like 1
Link to comment
Share on other sites

Thanks for your reply. 

In the same computer, ML 10.8.5 worked with the airport card without a hitch. In Mavericks, weird stuff happened. I tried importing my ML Networking Interface into Mavericks with proper terminal commands from eep.

ML and Mavericks have the same support for WiFi cards. I don't know what you mean by "importing my ML Networking Interface into Mavericks," but it doesn't sound a like a good idea.

 

It installed correctly but it shuts off Wi-Fi function. In Mavericks, I can only have either Wi-Fi or Marvell Yukon Lan. If Both kexts are loaded, only LAN works and Wi-Fi showed up in network setting and I could not turn it on through network setting.

Key is not messing with the system kexts IO80211Family.kext or IONetworkingFamily.kext as it is unnecessary to replace/patch these kexts and doing so just leads to problems.

 

Going through my DSDT.aml, I could not locate the Airpot Atheros 9380 at all. Yet, it clearly displayed in the IORegistry. I was hoping that if it showed up in DSDT.aml, maybe some patch might work.

Use the information in the ioreg to find it in your DSDT (eg. node in ioreg corresponds to node in DSDT).

 

WOuld changing SMBios to MacPro 3.1 make a difference?

I don't think smbios matters for your case.

 

If I try your NullEthernet Kext with SSDT, if it does not work, can I just uninstall the kext and delete the SSDT and back to square one? I am desperate to try anything as long as it does not give me serious KP that I cannot fix it myself.

Yes. And BTW, there is no such thing as a "serious KP" that cannot be fixed provided you know what you changed to cause it.

Link to comment
Share on other sites

@ RehabMan,

 

You just hit the nail's head right on. I truly believed in my case, the Atheros Airport card registered under IEEE80211 and Marvell Yukon Kext is installed through modified IONetworking family kext. Somehow it messed up there. 

Is there a way to fix this? I will try your Null Ethernet with SSDT and report back to you. I am sure there won't be any serious KP that cannot be fix as I am not doing something crazy here. 

 

Thanks and have a nice weekend! Congrats to Seahawks winning the Super Bowl.

Link to comment
Share on other sites

@ RehabMan,

 

You just hit the nail's head right on. I truly believed in my case, the Atheros Airport card registered under IEEE80211 and Marvell Yukon Kext is installed through modified IONetworking family kext. Somehow it messed up there. 

Is there a way to fix this?

No need to install a replacement IONetworkingFamily.kext to install support for a network driver. You can fix it by restoring to vanilla (you made a backup, right?).

 

Thanks and have a nice weekend! Congrats to Seahawks winning the Super Bowl.

Go Hawks!

Link to comment
Share on other sites

 Share

×
×
  • Create New...