Understanding Ethernet Built In 10 on Legacy Hackintosh
A practical look at what ‘Ethernet Built In 10’ means in IORegistry, why legacy guides use that term, and step-by-step fixes for X79, X99, Z77, and Z170 platforms.
When you see a legacy Hackintosh guide mention Ethernet Built In 10, it’s almost always shorthand for a specific set of kexts and ACPI patches that trick macOS into recognizing an onboard network interface as built-in. That designation matters because macOS 10.6 through 10.13 (and even early 10.14) often refuse to enable iMessage, FaceTime, App Store sign-in, and stable DHCP lease renewal unless the primary Ethernet controller reports itself as built-in via the IORegistry. The “10” isn’t a version number—it’s a bitmask flag (kBuiltIn = 0x10) used in AppleEthernet.kext and related IOKit matching logic. Getting that flag set correctly on X79, X99, Z77, and Z170 platforms trips up a lot of builders who follow older guides without understanding what’s actually going on.
What “Built In 10” Actually Means in IORegistry
In the IORegistry tree, every PCI device has a set of properties. For macOS to treat an Ethernet controller as onboard, the property built-in must exist and hold a value of 0x01 (a one-byte boolean). The numeric “10” you see in guide filenames or config snippets comes from the hexadecimal value 0x10 (decimal 16) that sometimes shows up in the IOEthernetController’s IOPrimaryInterface or IOBuiltin property when the system incorrectly inherits a default. A properly configured setup shows "built-in" = <01000000> in IORegistryExplorer. If you see 0x10 anywhere in the Ethernet node’s property list, it usually means a DSDT or SSDT patch wrote the wrong data type (a 32-bit integer instead of a one-byte boolean), or a device-properties injection in Clover’s config.plist used the wrong key format.
Verifying the flag is straightforward: open IORegistryExplorer, search for your Ethernet controller’s model name (e.g., Intel I210, Realtek RTL8111, Broadcom BCM57782), and look for the built-in key under the IOEthernetController node. If the key is missing or set to 0x10, macOS will still use the interface for basic networking but won’t bind it as primary for Apple services. That’s the root cause of the “Ethernet Built In 10” troubleshooting steps you find in legacy guides.
Common Platforms and Their Ethernet Controllers
| Platform | Typical Onboard Ethernet | Common Kext Used | Built-in Flag Method |
|---|---|---|---|
| X79 (C602/C606) | Intel 82579V / 82579LM | AppleIntelE1000e.kext (patched) | DSDT edit or device-properties |
| X99 (C612) | Intel I210 / I217-V | SmallTreeIntel82576.kext or AppleIGB.kext | SSDT-IMEI + device-properties |
| Z77 (Panther Point) | Intel 82579V | AppleIntelE1000e.kext (v3.x) | DSDT fix (DTGP method) |
| Z170 (Sunrise Point) | Intel I219-V | AppleIntelE1000e.kext (v3.4.0+) | config.plist > Devices > Arbitrary |
Each platform needs a slightly different injection path. On X79 and Z77, a DSDT patch that adds the built-in property directly under the Ethernet device scope is the most reliable method. On X99 and Z170, Clover’s device-properties injection (in config.plist under Devices > Arbitrary) is safer because it avoids touching the firmware tables. Always verify the exact PCI device path using IORegistryExplorer before applying any patch—a mismatch in the path (e.g., PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0) instead of PciRoot(0x0)/Pci(0x19,0x0)) will silently fail to inject the property.
Why Guides Use “Ethernet Built In 10” Rather Than “Built-in”
Many legacy guides from 2013–2016 came from Russian and Chinese forums where users shared config files with minimal English commentary. The number 10 appears because early versions of Clover (up to r2000) and Chameleon used a different injection mechanism: they wrote the built-in flag as a 32-bit integer with value 0x01, but some bootloaders misinterpreted the property and stored 0x10 instead. A user who saw 0x10 in IORegistryExplorer would then search for “Ethernet Built In 10” and find forum threads with the exact DSDT patch needed. The name stuck. If you’re following a guide that says “set Ethernet Built In 10,” understand that the goal is to achieve built-in = 0x01 (byte), not to preserve that 0x10 value.
Step-by-Step Correction for X99 and Z170
If you have an X99 or Z170 system and your Ethernet shows 0x10 or no built-in flag at all, the cleanest fix is through Clover’s device-properties injection. Here’s the precise procedure:
- Boot your Hackintosh and open IORegistryExplorer. Locate your Ethernet controller’s device path. For a typical X99 board with an Intel I210, the path is often
PciRoot(0x0)/Pci(0x1C,0x0)/Pci(0x0,0x0). Write it down exactly. - Mount your EFI partition and open
/EFI/CLOVER/config.plistwith a plist editor (PlistEdit Pro or Xcode). - Navigate to
Devices > Arbitrary. If the key doesn’t exist, create it as a dictionary. - Add a new dictionary entry with the exact device path as the key (case-sensitive). Inside it, add a dictionary with the key
built-inand typeDatawith value01000000(this is the byte0x01stored in the correct format). - Save the config.plist and reboot. After reboot, verify in IORegistryExplorer that the
built-inproperty now appears as<01000000>under the Ethernet node.
If you’re using a DSDT patch instead, the relevant code snippet looks like this (inserted into the DSDT under the Ethernet device scope):
Method (_DSM, 4, NotSerialized)
{
If (LEqual (Arg2, Zero))
{
Return (Buffer (One, 0x03))
}
Return (Package ()
{
"built-in", Buffer (One, 0x01)
})
}
The buffer 0x01 is the correct one-byte boolean. A four-byte buffer (0x01, 0x00, 0x00, 0x00) will still work on most macOS versions, but the one-byte form matches Apple’s native definition and avoids confusion in IORegistryExplorer.
Risks of Blindly Copying DSDT Patches
Many “Ethernet Built In 10” guides from 2015–2017 include a precompiled DSDT.aml or SSDT that applies the patch globally. That’s risky because the DSDT from your specific motherboard may have different device paths, PCI interrupt routing, or embedded controller definitions. Applying a generic DSDT from a forum post can break USB, SATA, or even cause kernel panics during boot. Always disassemble the DSDT with iasl, inspect the Ethernet device scope, and apply only the minimal patch shown above. For X99 users, we covered broader ACPI stability concerns in our earlier article on the Dual-CPU X99 Hackintosh Update: High Sierra, Clover r5123, and What to Watch For, which includes specific guidance on preserving ACPI table integrity.
Another common mistake is injecting the built-in property via SystemParameters > InjectSystemID in Clover. That setting does not set the built-in flag; it only injects a system UUID. Relying on it to fix Ethernet recognition will waste hours of debugging. The only reliable injection points are DSDT/SSDT patches or Clover’s device-properties Arbitrary section.
Troubleshooting When the Flag Still Shows 0x10
If after applying the correct patch you still see 0x10 in IORegistryExplorer, the problem is usually a kext that overrides the property at runtime. The most common culprit is AppleIntelE1000e.kext version 3.2.x or earlier, which contains a hardcoded check that overwrites the built-in flag with a default value. Update to version 3.4.0 or later, or switch to SmallTreeIntel82576.kext for I210/I211 controllers. Realtek users with RealtekRTL8111.kext version 2.2.2 or earlier may experience the same issue; the fix is to use version 2.3.0 from Mieze’s repository.
A secondary check: ensure no other property injection method is conflicting. If you have both a DSDT patch and a Clover device-properties injection for the same Ethernet controller, the bootloader will merge them, and the result may be a corrupted property set. Remove one method, reboot, and recheck. For X79 users, the 10Gb Ethernet on a Legacy Hackintosh: A Practical Guide for X79, X99, and Z170 article provides additional context on handling multiple network interfaces and ensuring the primary one is correctly flagged.
Testing Without Rebuilding the Whole System
You can test the built-in flag without a full reboot by unloading and reloading the Ethernet kext. In Terminal, run:
sudo kextunload /System/Library/Extensions/AppleIntelE1000e.kext
sudo kextload /System/Library/Extensions/AppleIntelE1000e.kext
Then immediately run ioreg -l | grep -i built-in to see if the property appears correctly. This trick saves time when iterating on config.plist changes, but be aware that some kexts (notably Apple’s own IONetworkingFamily.kext) cache the property at boot and will not re-read it until the next restart. If the flag doesn’t change after kext reload, a full reboot is required. Always back up your EFI folder before making any changes to config.plist or DSDT files—one wrong byte can render the system unbootable, and recovery from a USB installer is tedious on legacy hardware.
When the built-in flag is correctly set, macOS will show the Ethernet interface as “Built In” in System Information under Network, and services like iMessage will begin activation. If activation still fails despite a correct flag, the issue is likely in the Board-ID or ROM value, which is outside this guide’s scope. For the narrow problem of “Ethernet Built In 10,” the steps above will resolve the flag mismatch on any Intel-based legacy Hackintosh from Ivy Bridge through Skylake generations.
